use copy_from_slice to speed up

master
PanQL 6 years ago
parent 9e4a3f9662
commit 545d9d301c

@ -35,7 +35,8 @@ impl Stdin {
match buf_lock.pop_front() { match buf_lock.pop_front() {
Some(c) => return c, Some(c) => return c,
None => { None => {
self.pushed.wait(buf_lock); //self.pushed.wait(buf_lock);
return 0 as char;
} }
} }
} }

@ -31,20 +31,25 @@ impl INode for Vga {
} }
fn write_at(&self, _offset: usize, _buf: &[u8]) -> Result<usize> { fn write_at(&self, _offset: usize, _buf: &[u8]) -> Result<usize> {
info!("the _offset is {} {}", _offset, _buf[0]); info!("the _offset is {} {}", _offset, _buf[0]);
let mut result : usize = 0; //let mut result : usize = 0;
if let Some(fb) = FRAME_BUFFER.lock().as_mut() { //if let Some(fb) = FRAME_BUFFER.lock().as_mut() {
for x in 0..1024 { // TODO, should not use CONSTS //for x in 0..1024 { // TODO, should not use CONSTS
for y in 0..768 { //for y in 0..768 {
let blue = _buf[3 * (x * 768 + y)]; //let blue = _buf[3 * (x * 768 + y)];
let green = _buf[3 * (x * 768 + y) + 1]; //let green = _buf[3 * (x * 768 + y) + 1];
let red = _buf[3 * (x * 768 + y) + 2]; //let red = _buf[3 * (x * 768 + y) + 2];
let pixel : u32 = ((blue as u32) << 16) | ((green as u32) << 8) | (red as u32); //let pixel : u32 = ((blue as u32) << 16) | ((green as u32) << 8) | (red as u32);
fb.write(x as u32, y as u32, pixel); //fb.write(x as u32, y as u32, pixel);
result += 3; //result += 3;
} //}
} //}
} //}
return Ok(result); use crate::consts::KERNEL_OFFSET;
use core::slice;
let frame_buffer_data =
unsafe { slice::from_raw_parts_mut((KERNEL_OFFSET + 0xf000_0000) as *mut u8, ( 1024 * 768 * 3) as usize) };
frame_buffer_data.copy_from_slice(&_buf);
return Ok(1024 * 768 * 3);
} }
fn poll(&self) -> Result<PollStatus> { fn poll(&self) -> Result<PollStatus> {
Ok(PollStatus { // TOKNOW and TODO Ok(PollStatus { // TOKNOW and TODO

Loading…
Cancel
Save