Commit 102706b5 authored by reveman's avatar reveman Committed by Commit bot

cc: Return a NullCanvas instead of NULL in context lost situations.

This reduces the difference in code paths between normal usage and
context lost situations.

Also moves the save()/restore() pair required for GPU raster
into the RasterBuffer class so it can be avoided when unnecessary.

BUG=406404

Review URL: https://codereview.chromium.org/578843002

Cr-Commit-Position: refs/heads/master@{#295290}
parent bb493574
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include "third_party/khronos/GLES2/gl2ext.h" #include "third_party/khronos/GLES2/gl2ext.h"
#include "third_party/skia/include/core/SkSurface.h" #include "third_party/skia/include/core/SkSurface.h"
#include "third_party/skia/include/gpu/GrContext.h" #include "third_party/skia/include/gpu/GrContext.h"
#include "third_party/skia/include/utils/SkNullCanvas.h"
#include "ui/gfx/frame_time.h" #include "ui/gfx/frame_time.h"
#include "ui/gfx/rect.h" #include "ui/gfx/rect.h"
#include "ui/gfx/vector2d.h" #include "ui/gfx/vector2d.h"
...@@ -454,8 +455,11 @@ skia::RefPtr<SkCanvas> ResourceProvider::GpuRasterBuffer::AcquireSkCanvas() { ...@@ -454,8 +455,11 @@ skia::RefPtr<SkCanvas> ResourceProvider::GpuRasterBuffer::AcquireSkCanvas() {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
"ResourceProvider::GpuRasterBuffer::AcquireSkCanvas"); "ResourceProvider::GpuRasterBuffer::AcquireSkCanvas");
return surface_ ? skia::SharePtr(surface_->getCanvas()) skia::RefPtr<SkCanvas> canvas = surface_
: skia::RefPtr<SkCanvas>(); ? skia::SharePtr(surface_->getCanvas())
: skia::AdoptRef(SkCreateNullCanvas());
canvas->save();
return canvas;
} }
void ResourceProvider::GpuRasterBuffer::ReleaseSkCanvas( void ResourceProvider::GpuRasterBuffer::ReleaseSkCanvas(
...@@ -463,6 +467,8 @@ void ResourceProvider::GpuRasterBuffer::ReleaseSkCanvas( ...@@ -463,6 +467,8 @@ void ResourceProvider::GpuRasterBuffer::ReleaseSkCanvas(
// Note that this function is called from a worker thread. // Note that this function is called from a worker thread.
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
"ResourceProvider::GpuRasterBuffer::ReleaseSkCanvas"); "ResourceProvider::GpuRasterBuffer::ReleaseSkCanvas");
canvas->restore();
} }
ResourceProvider::ImageRasterBuffer::ImageRasterBuffer( ResourceProvider::ImageRasterBuffer::ImageRasterBuffer(
...@@ -506,7 +512,7 @@ skia::RefPtr<SkCanvas> ResourceProvider::ImageRasterBuffer::AcquireSkCanvas() { ...@@ -506,7 +512,7 @@ skia::RefPtr<SkCanvas> ResourceProvider::ImageRasterBuffer::AcquireSkCanvas() {
"ResourceProvider::ImageRasterBuffer::AcquireSkCanvas"); "ResourceProvider::ImageRasterBuffer::AcquireSkCanvas");
if (!mapped_buffer_) if (!mapped_buffer_)
return skia::RefPtr<SkCanvas>(); return skia::AdoptRef(SkCreateNullCanvas());
MakeBitmap(&raster_bitmap_, MakeBitmap(&raster_bitmap_,
mapped_buffer_, mapped_buffer_,
...@@ -570,7 +576,7 @@ skia::RefPtr<SkCanvas> ResourceProvider::PixelRasterBuffer::AcquireSkCanvas() { ...@@ -570,7 +576,7 @@ skia::RefPtr<SkCanvas> ResourceProvider::PixelRasterBuffer::AcquireSkCanvas() {
"ResourceProvider::PixelRasterBuffer::AcquireSkCanvas"); "ResourceProvider::PixelRasterBuffer::AcquireSkCanvas");
if (!mapped_buffer_) if (!mapped_buffer_)
return skia::RefPtr<SkCanvas>(); return skia::AdoptRef(SkCreateNullCanvas());
MakeBitmap(&raster_bitmap_, MakeBitmap(&raster_bitmap_,
mapped_buffer_, mapped_buffer_,
......
...@@ -3323,9 +3323,8 @@ TEST_P(ResourceProviderTest, PixelBufferLostContext) { ...@@ -3323,9 +3323,8 @@ TEST_P(ResourceProviderTest, PixelBufferLostContext) {
RasterBuffer* raster_buffer = resource_provider->AcquirePixelRasterBuffer(id); RasterBuffer* raster_buffer = resource_provider->AcquirePixelRasterBuffer(id);
skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas(); skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas();
EXPECT_TRUE(canvas.get() == NULL); EXPECT_TRUE(canvas);
raster_buffer->ReleaseSkCanvas(canvas); raster_buffer->ReleaseSkCanvas(canvas);
canvas.clear();
resource_provider->ReleasePixelRasterBuffer(id); resource_provider->ReleasePixelRasterBuffer(id);
Mock::VerifyAndClearExpectations(context); Mock::VerifyAndClearExpectations(context);
} }
......
...@@ -123,9 +123,7 @@ class RasterTaskImpl : public RasterTask { ...@@ -123,9 +123,7 @@ class RasterTaskImpl : public RasterTask {
devtools_instrumentation::kRasterTask, layer_id_); devtools_instrumentation::kRasterTask, layer_id_);
skia::RefPtr<SkCanvas> canvas = raster_buffer_->AcquireSkCanvas(); skia::RefPtr<SkCanvas> canvas = raster_buffer_->AcquireSkCanvas();
if (!canvas) DCHECK(canvas);
return;
canvas->save();
skia::RefPtr<SkDrawFilter> draw_filter; skia::RefPtr<SkDrawFilter> draw_filter;
switch (raster_mode_) { switch (raster_mode_) {
...@@ -164,7 +162,6 @@ class RasterTaskImpl : public RasterTask { ...@@ -164,7 +162,6 @@ class RasterTaskImpl : public RasterTask {
100); 100);
} }
canvas->restore();
raster_buffer_->ReleaseSkCanvas(canvas); raster_buffer_->ReleaseSkCanvas(canvas);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment