added onpaint to software path
This commit is contained in:
parent
783c9d9218
commit
221714e141
7 changed files with 227 additions and 201 deletions
|
@ -281,7 +281,7 @@ class WebContents : public mate::TrackableObject<WebContents>,
|
|||
private:
|
||||
AtomBrowserContext* GetBrowserContext() const;
|
||||
|
||||
OffScreenWindow::OnPaintCallback paint_callback_;
|
||||
atom::OnPaintCallback paint_callback_;
|
||||
|
||||
uint32_t GetNextRequestId() {
|
||||
return ++request_id_;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
namespace atom {
|
||||
|
||||
OffScreenOutputDevice::OffScreenOutputDevice() {
|
||||
OffScreenOutputDevice::OffScreenOutputDevice() : callback_(nullptr) {
|
||||
std::cout << "OffScreenOutputDevice" << std::endl;
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,10 @@ OffScreenOutputDevice::~OffScreenOutputDevice() {
|
|||
std::cout << "~OffScreenOutputDevice" << std::endl;
|
||||
}
|
||||
|
||||
void OffScreenOutputDevice::SetPaintCallback(const OnPaintCallback* callback) {
|
||||
callback_.reset(callback);
|
||||
}
|
||||
|
||||
void OffScreenOutputDevice::Resize(
|
||||
const gfx::Size& pixel_size, float scale_factor) {
|
||||
std::cout << "Resize" << std::endl;
|
||||
|
@ -43,7 +47,7 @@ void OffScreenOutputDevice::Resize(
|
|||
}
|
||||
|
||||
SkCanvas* OffScreenOutputDevice::BeginPaint(const gfx::Rect& damage_rect) {
|
||||
std::cout << "BeginPaint" << std::endl;
|
||||
// std::cout << "BeginPaint" << std::endl;
|
||||
DCHECK(canvas_.get());
|
||||
DCHECK(bitmap_.get());
|
||||
|
||||
|
@ -53,7 +57,7 @@ SkCanvas* OffScreenOutputDevice::BeginPaint(const gfx::Rect& damage_rect) {
|
|||
}
|
||||
|
||||
void OffScreenOutputDevice::EndPaint() {
|
||||
std::cout << "EndPaint" << std::endl;
|
||||
// std::cout << "EndPaint" << std::endl;
|
||||
|
||||
DCHECK(canvas_.get());
|
||||
DCHECK(bitmap_.get());
|
||||
|
@ -62,14 +66,35 @@ void OffScreenOutputDevice::EndPaint() {
|
|||
|
||||
cc::SoftwareOutputDevice::EndPaint();
|
||||
|
||||
SkAutoLockPixels bitmap_pixels_lock(*bitmap_.get());
|
||||
//saveSkBitmapToBMPFile(*(bitmap_.get()), "test.bmp");
|
||||
OnPaint(damage_rect_);
|
||||
|
||||
uint8_t* pixels = reinterpret_cast<uint8_t*>(bitmap_->getPixels());
|
||||
for (int i = 0; i<16; i++) {
|
||||
int x = static_cast<int>(pixels[i]);
|
||||
std::cout << std::hex << x << std::dec << std::endl;
|
||||
// SkAutoLockPixels bitmap_pixels_lock(*bitmap_.get());
|
||||
// saveSkBitmapToBMPFile(*(bitmap_.get()), "test.bmp");
|
||||
|
||||
// uint8_t* pixels = reinterpret_cast<uint8_t*>(bitmap_->getPixels());
|
||||
// for (int i = 0; i<16; i++) {
|
||||
// int x = static_cast<int>(pixels[i]);
|
||||
// std::cout << std::hex << x << std::dec << std::endl;
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
void OffScreenOutputDevice::OnPaint(const gfx::Rect& damage_rect) {
|
||||
gfx::Rect rect = damage_rect;
|
||||
if (!pending_damage_rect_.IsEmpty()) {
|
||||
rect.Union(pending_damage_rect_);
|
||||
pending_damage_rect_.SetRect(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
rect.Intersect(gfx::Rect(viewport_pixel_size_));
|
||||
if (rect.IsEmpty())
|
||||
return;
|
||||
|
||||
SkAutoLockPixels bitmap_pixels_lock(*bitmap_.get());
|
||||
// std::cout << "Paint" << std::endl;
|
||||
if (callback_.get())
|
||||
callback_->Run(rect, bitmap_->width(), bitmap_->height(),
|
||||
bitmap_->getPixels());
|
||||
}
|
||||
|
||||
} // namespace atom
|
||||
|
|
|
@ -8,15 +8,20 @@
|
|||
#include "cc/output/software_output_device.h"
|
||||
#include "third_party/skia/include/core/SkBitmap.h"
|
||||
#include "third_party/skia/include/core/SkCanvas.h"
|
||||
#include "base/callback.h"
|
||||
|
||||
#include "content/browser/web_contents/web_contents_view.h"
|
||||
|
||||
namespace atom {
|
||||
|
||||
typedef base::Callback<void(const gfx::Rect&,int,int,void*)> OnPaintCallback;
|
||||
|
||||
class OffScreenOutputDevice : public cc::SoftwareOutputDevice {
|
||||
public:
|
||||
OffScreenOutputDevice();
|
||||
~OffScreenOutputDevice();
|
||||
|
||||
void SetPaintCallback(const OnPaintCallback*);
|
||||
|
||||
// void saveSkBitmapToBMPFile(const SkBitmap& skBitmap, const char* path);
|
||||
void Resize(const gfx::Size& pixel_size, float scale_factor) override;
|
||||
|
@ -24,11 +29,15 @@ public:
|
|||
SkCanvas* BeginPaint(const gfx::Rect& damage_rect) override;
|
||||
|
||||
void EndPaint() override;
|
||||
|
||||
void OnPaint(const gfx::Rect& damage_rect);
|
||||
|
||||
private:
|
||||
std::unique_ptr<SkCanvas> canvas_;
|
||||
std::unique_ptr<SkBitmap> bitmap_;
|
||||
gfx::Rect pending_damage_rect_;
|
||||
|
||||
std::unique_ptr<const atom::OnPaintCallback> callback_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(OffScreenOutputDevice);
|
||||
};
|
||||
|
|
|
@ -487,8 +487,10 @@ void OffScreenWindow::SendBeginFrame(base::TimeTicks frame_time,
|
|||
// std::cout << "sent begin frame" << std::endl;
|
||||
}
|
||||
|
||||
void OffScreenWindow::SetPaintCallback(const OnPaintCallback *callback) {
|
||||
void OffScreenWindow::SetPaintCallback(const OnPaintCallback* callback) {
|
||||
paintCallback.reset(callback);
|
||||
if (software_output_device_)
|
||||
software_output_device_->SetPaintCallback(paintCallback.get());
|
||||
}
|
||||
|
||||
OffScreenWindow::~OffScreenWindow() {
|
||||
|
@ -551,13 +553,7 @@ gfx::Vector2dF OffScreenWindow::GetLastScrollOffset() const {
|
|||
|
||||
gfx::NativeView OffScreenWindow::GetNativeView() const {
|
||||
// std::cout << "GetNativeView" << std::endl;
|
||||
#if defined(OS_MACOSX)
|
||||
return gfx::NativeView();
|
||||
#elif
|
||||
auto widget = views::Widget::GetWidgetForNativeWindow(
|
||||
native_window_->GetNativeWindow());
|
||||
return widget->GetNativeView();
|
||||
#endif
|
||||
}
|
||||
|
||||
gfx::NativeViewAccessible OffScreenWindow::GetNativeViewAccessible() {
|
||||
|
|
|
@ -65,9 +65,6 @@ class OffScreenWindow
|
|||
public ui::CompositorDelegate,
|
||||
public content::DelegatedFrameHostClient {
|
||||
public:
|
||||
typedef base::Callback<void(const gfx::Rect&,int,int,void*)>
|
||||
OnPaintCallback;
|
||||
|
||||
OffScreenWindow(content::RenderWidgetHost*, NativeWindow*);
|
||||
~OffScreenWindow();
|
||||
|
||||
|
@ -190,8 +187,8 @@ public:
|
|||
void SendBeginFrame(base::TimeTicks frame_time,
|
||||
base::TimeDelta vsync_period);
|
||||
|
||||
std::unique_ptr<const OnPaintCallback> paintCallback;
|
||||
void SetPaintCallback(const OnPaintCallback*);
|
||||
std::unique_ptr<const atom::OnPaintCallback> paintCallback;
|
||||
void SetPaintCallback(const atom::OnPaintCallback*);
|
||||
|
||||
private:
|
||||
void SetFrameRate();
|
||||
|
|
|
@ -46,7 +46,7 @@ exports.load = (appUrl) => {
|
|||
end1 = +new Date();
|
||||
|
||||
const d = end1 - start1
|
||||
// console.log(`browser #1: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
console.log(`browser #1: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
|
||||
start1 = end1
|
||||
})
|
||||
|
@ -62,7 +62,6 @@ exports.load = (appUrl) => {
|
|||
});*/
|
||||
|
||||
mainWindow2 = new BrowserWindow({
|
||||
//disableGPU: false,
|
||||
width: 800,
|
||||
height: 600,
|
||||
autoHideMenuBar: true,
|
||||
|
@ -72,7 +71,7 @@ exports.load = (appUrl) => {
|
|||
nodeIntegration: false
|
||||
}
|
||||
})
|
||||
mainWindow2.loadURL('http://mrdoob.com/lab/javascript/requestanimationframe/')
|
||||
mainWindow2.loadURL(appUrl)
|
||||
mainWindow2.focus()
|
||||
mainWindow2.webContents.on('dom-ready', () => {
|
||||
mainWindow2.webContents.beginFrameSubscription(() => {
|
||||
|
@ -86,183 +85,183 @@ exports.load = (appUrl) => {
|
|||
end2 = +new Date();
|
||||
|
||||
const d = end2 - start2
|
||||
// console.log(`browser #2: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
console.log(`browser #2: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
|
||||
start2 = end2
|
||||
})
|
||||
//
|
||||
// mainWindow3 = new BrowserWindow({
|
||||
// width: 800,
|
||||
// height: 600,
|
||||
// autoHideMenuBar: true,
|
||||
// backgroundColor: '#FFFFFF',
|
||||
// useContentSize: true,
|
||||
// webPreferences: {
|
||||
// nodeIntegration: false
|
||||
// }
|
||||
// })
|
||||
// mainWindow3.loadURL(appUrl)
|
||||
// mainWindow3.focus()
|
||||
// mainWindow3.webContents.on('dom-ready', () => {
|
||||
// mainWindow3.webContents.beginFrameSubscription(() => {
|
||||
// console.log("asd")
|
||||
// })
|
||||
// })
|
||||
//
|
||||
// var start3, end3
|
||||
// start3 = +new Date();
|
||||
// mainWindow3.webContents.on('paint', (e, rect, w, h, data) => {
|
||||
// end3 = +new Date();
|
||||
//
|
||||
// const d = end3 - start3
|
||||
// console.log(`browser #3: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
//
|
||||
// start3 = end3
|
||||
// })
|
||||
//
|
||||
// mainWindow4 = new BrowserWindow({
|
||||
// width: 800,
|
||||
// height: 600,
|
||||
// autoHideMenuBar: true,
|
||||
// backgroundColor: '#FFFFFF',
|
||||
// useContentSize: true,
|
||||
// webPreferences: {
|
||||
// nodeIntegration: false
|
||||
// }
|
||||
// })
|
||||
// mainWindow4.loadURL(appUrl)
|
||||
// mainWindow4.focus()
|
||||
// mainWindow4.webContents.on('dom-ready', () => {
|
||||
// mainWindow4.webContents.beginFrameSubscription(() => {
|
||||
// console.log("asd")
|
||||
// })
|
||||
// })
|
||||
//
|
||||
// var start4, end4
|
||||
// start4 = +new Date();
|
||||
// mainWindow4.webContents.on('paint', (e, rect, w, h, data) => {
|
||||
// end4 = +new Date();
|
||||
//
|
||||
// const d = end4 - start4
|
||||
// console.log(`browser #4: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
//
|
||||
// start4 = end4
|
||||
// })
|
||||
|
||||
mainWindow3 = new BrowserWindow({
|
||||
width: 800,
|
||||
height: 600,
|
||||
autoHideMenuBar: true,
|
||||
backgroundColor: '#FFFFFF',
|
||||
useContentSize: true,
|
||||
webPreferences: {
|
||||
nodeIntegration: false
|
||||
}
|
||||
})
|
||||
mainWindow3.loadURL(appUrl)
|
||||
mainWindow3.focus()
|
||||
mainWindow3.webContents.on('dom-ready', () => {
|
||||
mainWindow3.webContents.beginFrameSubscription(() => {
|
||||
console.log("asd")
|
||||
})
|
||||
})
|
||||
|
||||
var start3, end3
|
||||
start3 = +new Date();
|
||||
mainWindow3.webContents.on('paint', (e, rect, w, h, data) => {
|
||||
end3 = +new Date();
|
||||
|
||||
const d = end3 - start3
|
||||
console.log(`browser #3: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
|
||||
start3 = end3
|
||||
})
|
||||
|
||||
mainWindow4 = new BrowserWindow({
|
||||
width: 800,
|
||||
height: 600,
|
||||
autoHideMenuBar: true,
|
||||
backgroundColor: '#FFFFFF',
|
||||
useContentSize: true,
|
||||
webPreferences: {
|
||||
nodeIntegration: false
|
||||
}
|
||||
})
|
||||
mainWindow4.loadURL(appUrl)
|
||||
mainWindow4.focus()
|
||||
mainWindow4.webContents.on('dom-ready', () => {
|
||||
mainWindow4.webContents.beginFrameSubscription(() => {
|
||||
console.log("asd")
|
||||
})
|
||||
})
|
||||
|
||||
var start4, end4
|
||||
start4 = +new Date();
|
||||
mainWindow4.webContents.on('paint', (e, rect, w, h, data) => {
|
||||
end4 = +new Date();
|
||||
|
||||
const d = end4 - start4
|
||||
console.log(`browser #4: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
|
||||
start4 = end4
|
||||
})
|
||||
|
||||
// mainWindow5 = new BrowserWindow({
|
||||
// width: 800,
|
||||
// height: 600,
|
||||
// autoHideMenuBar: true,
|
||||
// backgroundColor: '#FFFFFF',
|
||||
// useContentSize: true,
|
||||
// webPreferences: {
|
||||
// nodeIntegration: false
|
||||
// }
|
||||
// })
|
||||
// mainWindow5.loadURL(appUrl)
|
||||
// mainWindow5.focus()
|
||||
// mainWindow5.webContents.on('dom-ready', () => {
|
||||
// mainWindow5.webContents.beginFrameSubscription(() => {
|
||||
// console.log("asd")
|
||||
// })
|
||||
// })
|
||||
//
|
||||
// var start5, end5
|
||||
// start5 = +new Date();
|
||||
// mainWindow5.webContents.on('paint', (e, rect, w, h, data) => {
|
||||
// end5 = +new Date();
|
||||
//
|
||||
// const d = end5 - start5
|
||||
// console.log(`browser #5: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
//
|
||||
// start5 = end5
|
||||
// })
|
||||
//
|
||||
// mainWindow6 = new BrowserWindow({
|
||||
// width: 800,
|
||||
// height: 600,
|
||||
// autoHideMenuBar: true,
|
||||
// backgroundColor: '#FFFFFF',
|
||||
// useContentSize: true,
|
||||
// webPreferences: {
|
||||
// nodeIntegration: false
|
||||
// }
|
||||
// })
|
||||
// mainWindow6.loadURL(appUrl)
|
||||
// mainWindow6.focus()
|
||||
// mainWindow6.webContents.on('dom-ready', () => {
|
||||
// mainWindow6.webContents.beginFrameSubscription(() => {
|
||||
// console.log("asd")
|
||||
// })
|
||||
// })
|
||||
//
|
||||
// var start6, end6
|
||||
// start6 = +new Date();
|
||||
// mainWindow6.webContents.on('paint', (e, rect, w, h, data) => {
|
||||
// end6 = +new Date();
|
||||
//
|
||||
// const d = end6 - start6
|
||||
// console.log(`browser #6: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
//
|
||||
// start6 = end6
|
||||
// })
|
||||
//
|
||||
// mainWindow7 = new BrowserWindow({
|
||||
// width: 800,
|
||||
// height: 600,
|
||||
// autoHideMenuBar: true,
|
||||
// backgroundColor: '#FFFFFF',
|
||||
// useContentSize: true,
|
||||
// webPreferences: {
|
||||
// nodeIntegration: false
|
||||
// }
|
||||
// })
|
||||
// mainWindow7.loadURL(appUrl)
|
||||
// mainWindow7.focus()
|
||||
// mainWindow7.webContents.on('dom-ready', () => {
|
||||
// mainWindow7.webContents.beginFrameSubscription(() => {
|
||||
// console.log("asd")
|
||||
// })
|
||||
// })
|
||||
//
|
||||
// var start7, end7
|
||||
// start7 = +new Date();
|
||||
// mainWindow7.webContents.on('paint', (e, rect, w, h, data) => {
|
||||
// end7 = +new Date();
|
||||
//
|
||||
// const d = end7 - start7
|
||||
// console.log(`browser #7: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
//
|
||||
// start7 = end7
|
||||
// })
|
||||
//
|
||||
// mainWindow8 = new BrowserWindow({
|
||||
// width: 800,
|
||||
// height: 600,
|
||||
// autoHideMenuBar: true,
|
||||
// backgroundColor: '#FFFFFF',
|
||||
// useContentSize: true,
|
||||
// webPreferences: {
|
||||
// nodeIntegration: false
|
||||
// }
|
||||
// })
|
||||
// mainWindow8.loadURL(appUrl)
|
||||
// mainWindow8.focus()
|
||||
// mainWindow8.webContents.on('dom-ready', () => {
|
||||
// mainWindow8.webContents.beginFrameSubscription(() => {
|
||||
// console.log("asd")
|
||||
// })
|
||||
// })
|
||||
//
|
||||
// var start8, end8
|
||||
// start8 = +new Date();
|
||||
// mainWindow8.webContents.on('paint', (e, rect, w, h, data) => {
|
||||
// end8 = +new Date();
|
||||
//
|
||||
// const d = end8 - start8
|
||||
// console.log(`browser #8: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
//
|
||||
// start8 = end8
|
||||
// })
|
||||
mainWindow5 = new BrowserWindow({
|
||||
width: 800,
|
||||
height: 600,
|
||||
autoHideMenuBar: true,
|
||||
backgroundColor: '#FFFFFF',
|
||||
useContentSize: true,
|
||||
webPreferences: {
|
||||
nodeIntegration: false
|
||||
}
|
||||
})
|
||||
mainWindow5.loadURL(appUrl)
|
||||
mainWindow5.focus()
|
||||
mainWindow5.webContents.on('dom-ready', () => {
|
||||
mainWindow5.webContents.beginFrameSubscription(() => {
|
||||
console.log("asd")
|
||||
})
|
||||
})
|
||||
|
||||
var start5, end5
|
||||
start5 = +new Date();
|
||||
mainWindow5.webContents.on('paint', (e, rect, w, h, data) => {
|
||||
end5 = +new Date();
|
||||
|
||||
const d = end5 - start5
|
||||
console.log(`browser #5: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
|
||||
start5 = end5
|
||||
})
|
||||
|
||||
mainWindow6 = new BrowserWindow({
|
||||
width: 800,
|
||||
height: 600,
|
||||
autoHideMenuBar: true,
|
||||
backgroundColor: '#FFFFFF',
|
||||
useContentSize: true,
|
||||
webPreferences: {
|
||||
nodeIntegration: false
|
||||
}
|
||||
})
|
||||
mainWindow6.loadURL(appUrl)
|
||||
mainWindow6.focus()
|
||||
mainWindow6.webContents.on('dom-ready', () => {
|
||||
mainWindow6.webContents.beginFrameSubscription(() => {
|
||||
console.log("asd")
|
||||
})
|
||||
})
|
||||
|
||||
var start6, end6
|
||||
start6 = +new Date();
|
||||
mainWindow6.webContents.on('paint', (e, rect, w, h, data) => {
|
||||
end6 = +new Date();
|
||||
|
||||
const d = end6 - start6
|
||||
console.log(`browser #6: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
|
||||
start6 = end6
|
||||
})
|
||||
|
||||
mainWindow7 = new BrowserWindow({
|
||||
width: 800,
|
||||
height: 600,
|
||||
autoHideMenuBar: true,
|
||||
backgroundColor: '#FFFFFF',
|
||||
useContentSize: true,
|
||||
webPreferences: {
|
||||
nodeIntegration: false
|
||||
}
|
||||
})
|
||||
mainWindow7.loadURL(appUrl)
|
||||
mainWindow7.focus()
|
||||
mainWindow7.webContents.on('dom-ready', () => {
|
||||
mainWindow7.webContents.beginFrameSubscription(() => {
|
||||
console.log("asd")
|
||||
})
|
||||
})
|
||||
|
||||
var start7, end7
|
||||
start7 = +new Date();
|
||||
mainWindow7.webContents.on('paint', (e, rect, w, h, data) => {
|
||||
end7 = +new Date();
|
||||
|
||||
const d = end7 - start7
|
||||
console.log(`browser #7: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
|
||||
start7 = end7
|
||||
})
|
||||
|
||||
mainWindow8 = new BrowserWindow({
|
||||
width: 800,
|
||||
height: 600,
|
||||
autoHideMenuBar: true,
|
||||
backgroundColor: '#FFFFFF',
|
||||
useContentSize: true,
|
||||
webPreferences: {
|
||||
nodeIntegration: false
|
||||
}
|
||||
})
|
||||
mainWindow8.loadURL(appUrl)
|
||||
mainWindow8.focus()
|
||||
mainWindow8.webContents.on('dom-ready', () => {
|
||||
mainWindow8.webContents.beginFrameSubscription(() => {
|
||||
console.log("asd")
|
||||
})
|
||||
})
|
||||
|
||||
var start8, end8
|
||||
start8 = +new Date();
|
||||
mainWindow8.webContents.on('paint', (e, rect, w, h, data) => {
|
||||
end8 = +new Date();
|
||||
|
||||
const d = end8 - start8
|
||||
console.log(`browser #8: ${d < 10 ? ` ${d}` : d} ms`)
|
||||
|
||||
start8 = end8
|
||||
})
|
||||
})
|
||||
}
|
||||
|
|
|
@ -329,6 +329,6 @@ if (option.file && !option.webdriver) {
|
|||
startRepl()
|
||||
} else {
|
||||
const indexPath = path.join(__dirname, '/index.html')
|
||||
loadApplicationByUrl(`http://www.e-try.com/black.htm`)
|
||||
//loadApplicationByUrl(`http://mrdoob.com/lab/javascript/requestanimationframe/`)
|
||||
//loadApplicationByUrl(`http://www.e-try.com/black.htm`)
|
||||
loadApplicationByUrl(`http://mrdoob.com/lab/javascript/requestanimationframe/`)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue