Refactor osr_output_device

This commit is contained in:
Cheng Zhao 2016-08-03 13:04:36 +09:00
parent 9d8e510a55
commit ea8ea1543f
8 changed files with 40 additions and 44 deletions

View file

@ -10,10 +10,10 @@
namespace atom {
OffScreenOutputDevice::OffScreenOutputDevice(bool transparent,
const OnPaintCallback& callback):
transparent_(transparent),
callback_(callback),
active_(false) {
const OnPaintCallback& callback)
: transparent_(transparent),
callback_(callback),
active_(false) {
DCHECK(!callback_.is_null());
}
@ -27,21 +27,21 @@ void OffScreenOutputDevice::Resize(
if (viewport_pixel_size_ == pixel_size) return;
viewport_pixel_size_ = pixel_size;
canvas_.reset(NULL);
canvas_.reset();
bitmap_.reset(new SkBitmap);
bitmap_->allocN32Pixels(viewport_pixel_size_.width(),
viewport_pixel_size_.height(),
!transparent_);
if (bitmap_->drawsNothing()) {
NOTREACHED();
bitmap_.reset(NULL);
bitmap_.reset();
return;
}
if (transparent_)
bitmap_->eraseARGB(0, 0, 0, 0);
canvas_.reset(new SkCanvas(*bitmap_.get()));
canvas_.reset(new SkCanvas(*bitmap_));
}
SkCanvas* OffScreenOutputDevice::BeginPaint(const gfx::Rect& damage_rect) {
@ -71,8 +71,7 @@ void OffScreenOutputDevice::SetActive(bool active) {
active_ = active;
if (active_)
OnPaint(gfx::Rect(0, 0, viewport_pixel_size_.width(),
viewport_pixel_size_.height()));
OnPaint(gfx::Rect(viewport_pixel_size_));
}
void OffScreenOutputDevice::OnPaint(const gfx::Rect& damage_rect) {
@ -86,9 +85,8 @@ void OffScreenOutputDevice::OnPaint(const gfx::Rect& damage_rect) {
if (rect.IsEmpty())
return;
SkAutoLockPixels bitmap_pixels_lock(*bitmap_.get());
callback_.Run(rect, bitmap_->width(), bitmap_->height(),
SkAutoLockPixels bitmap_pixels_lock(*bitmap_);
callback_.Run(rect, gfx::Size(bitmap_->width(), bitmap_->height()),
bitmap_->getPixels());
}

View file

@ -12,26 +12,25 @@
namespace atom {
typedef base::Callback<void(const gfx::Rect&, int, int, void*)> OnPaintCallback;
typedef base::Callback<void(const gfx::Rect&,
const gfx::Size&, void*)> OnPaintCallback;
class OffScreenOutputDevice : public cc::SoftwareOutputDevice {
public:
OffScreenOutputDevice(bool transparent, const OnPaintCallback& callback);
~OffScreenOutputDevice();
// cc::SoftwareOutputDevice:
void Resize(const gfx::Size& pixel_size, float scale_factor) override;
SkCanvas* BeginPaint(const gfx::Rect& damage_rect) override;
void EndPaint() override;
void SetActive(bool active);
void OnPaint(const gfx::Rect& damage_rect);
private:
const bool transparent_;
const OnPaintCallback callback_;
OnPaintCallback callback_;
bool active_;

View file

@ -259,9 +259,9 @@ class AtomCopyFrameGenerator {
const gfx::Rect& damage_rect,
const SkBitmap& bitmap,
std::unique_ptr<SkAutoLockPixels> bitmap_pixels_lock) {
uint8_t* pixels = reinterpret_cast<uint8_t*>(bitmap.getPixels());
view_->OnPaint(damage_rect, bitmap.width(), bitmap.height(), pixels);
view_->OnPaint(damage_rect,
gfx::Size(bitmap.width(), bitmap.height()),
bitmap.getPixels());
if (frame_retry_count_ > 0)
frame_retry_count_ = 0;
@ -845,15 +845,12 @@ bool OffScreenRenderWidgetHostView::IsAutoResizeEnabled() const {
void OffScreenRenderWidgetHostView::OnPaint(
const gfx::Rect& damage_rect,
int bitmap_width,
int bitmap_height,
const gfx::Size& bitmap_size,
void* bitmap_pixels) {
TRACE_EVENT0("electron", "OffScreenRenderWidgetHostView::OnPaint");
if (!callback_.is_null()) {
callback_.Run(damage_rect, gfx::Size(bitmap_width, bitmap_height),
bitmap_pixels);
}
if (!callback_.is_null())
callback_.Run(damage_rect, bitmap_size, bitmap_pixels);
}
void OffScreenRenderWidgetHostView::SetPainting(bool painting) {

View file

@ -198,8 +198,7 @@ class OffScreenRenderWidgetHostView:
void SetPaintCallback(const OnPaintCallback& callback);
void OnPaint(const gfx::Rect& damage_rect,
int bitmap_width,
int bitmap_height,
const gfx::Size& bitmap_size,
void* bitmap_pixels);
void SetPainting(bool painting);
@ -219,7 +218,7 @@ private:
OffScreenOutputDevice* software_output_device_;
const OnPaintCallback callback_;
OnPaintCallback callback_;
int frame_rate_;
int frame_rate_threshold_ms_;