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 @@
#include "third_party/khronos/GLES2/gl2ext.h"
#include "third_party/skia/include/core/SkSurface.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/rect.h"
#include "ui/gfx/vector2d.h"
......@@ -454,8 +455,11 @@ skia::RefPtr<SkCanvas> ResourceProvider::GpuRasterBuffer::AcquireSkCanvas() {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
"ResourceProvider::GpuRasterBuffer::AcquireSkCanvas");
return surface_ ? skia::SharePtr(surface_->getCanvas())
: skia::RefPtr<SkCanvas>();
skia::RefPtr<SkCanvas> canvas = surface_
? skia::SharePtr(surface_->getCanvas())
: skia::AdoptRef(SkCreateNullCanvas());
canvas->save();
return canvas;
}
void ResourceProvider::GpuRasterBuffer::ReleaseSkCanvas(
......@@ -463,6 +467,8 @@ void ResourceProvider::GpuRasterBuffer::ReleaseSkCanvas(
// Note that this function is called from a worker thread.
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
"ResourceProvider::GpuRasterBuffer::ReleaseSkCanvas");
canvas->restore();
}
ResourceProvider::ImageRasterBuffer::ImageRasterBuffer(
......@@ -506,7 +512,7 @@ skia::RefPtr<SkCanvas> ResourceProvider::ImageRasterBuffer::AcquireSkCanvas() {
"ResourceProvider::ImageRasterBuffer::AcquireSkCanvas");
if (!mapped_buffer_)
return skia::RefPtr<SkCanvas>();
return skia::AdoptRef(SkCreateNullCanvas());
MakeBitmap(&raster_bitmap_,
mapped_buffer_,
......@@ -570,7 +576,7 @@ skia::RefPtr<SkCanvas> ResourceProvider::PixelRasterBuffer::AcquireSkCanvas() {
"ResourceProvider::PixelRasterBuffer::AcquireSkCanvas");
if (!mapped_buffer_)
return skia::RefPtr<SkCanvas>();
return skia::AdoptRef(SkCreateNullCanvas());
MakeBitmap(&raster_bitmap_,
mapped_buffer_,
......
......@@ -3323,9 +3323,8 @@ TEST_P(ResourceProviderTest, PixelBufferLostContext) {
RasterBuffer* raster_buffer = resource_provider->AcquirePixelRasterBuffer(id);
skia::RefPtr<SkCanvas> canvas = raster_buffer->AcquireSkCanvas();
EXPECT_TRUE(canvas.get() == NULL);
EXPECT_TRUE(canvas);
raster_buffer->ReleaseSkCanvas(canvas);
canvas.clear();
resource_provider->ReleasePixelRasterBuffer(id);
Mock::VerifyAndClearExpectations(context);
}
......
......@@ -123,9 +123,7 @@ class RasterTaskImpl : public RasterTask {
devtools_instrumentation::kRasterTask, layer_id_);
skia::RefPtr<SkCanvas> canvas = raster_buffer_->AcquireSkCanvas();
if (!canvas)
return;
canvas->save();
DCHECK(canvas);
skia::RefPtr<SkDrawFilter> draw_filter;
switch (raster_mode_) {
......@@ -164,7 +162,6 @@ class RasterTaskImpl : public RasterTask {
100);
}
canvas->restore();
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