Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(629)

Unified Diff: cc/resources/resource_provider.cc

Issue 578843002: cc: Return a NullCanvas instead of NULL in context lost situations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update unit test Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/resource_provider.cc
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index 5389e4ba4c6786ebb9ed2d28fe1fdecc14981a9f..63414bb7fb27884b6a0cc720213afd9a3fadc419 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -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_,
« no previous file with comments | « no previous file | cc/resources/resource_provider_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698