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

Unified Diff: content/browser/renderer_host/render_widget_host_view_gtk.cc

Issue 12881005: Allow CopyFromBackingStore to fallback to copying from the renderer side if the accelerated surface… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: unused include Created 7 years, 9 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
Index: content/browser/renderer_host/render_widget_host_view_gtk.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_gtk.cc b/content/browser/renderer_host/render_widget_host_view_gtk.cc
index b4fd47aff2e213e4174644a6858f689767705448..c137096687316ca7f514c7aab3c82cf5417dcbbb 100644
--- a/content/browser/renderer_host/render_widget_host_view_gtk.cc
+++ b/content/browser/renderer_host/render_widget_host_view_gtk.cc
@@ -1051,47 +1051,9 @@ void RenderWidgetHostViewGtk::CopyFromCompositingSurface(
const gfx::Rect& src_subrect,
const gfx::Size& /* dst_size */,
const base::Callback<void(bool, const SkBitmap&)>& callback) {
- base::ScopedClosureRunner scoped_callback_runner(
- base::Bind(callback, false, SkBitmap()));
-
- XID parent_window = ui::GetParentWindow(compositing_surface_);
- if (parent_window == None)
- return;
-
- // Get the window offset with respect to its parent.
- XWindowAttributes attr;
- if (!XGetWindowAttributes(ui::GetXDisplay(), compositing_surface_, &attr))
- return;
-
- gfx::Rect src_subrect_in_parent(src_subrect);
- src_subrect_in_parent.Offset(attr.x, attr.y);
-
- ui::XScopedImage image(XGetImage(ui::GetXDisplay(), parent_window,
- src_subrect_in_parent.x(),
- src_subrect_in_parent.y(),
- src_subrect_in_parent.width(),
- src_subrect_in_parent.height(),
- AllPlanes, ZPixmap));
- if (!image.get())
- return;
-
- SkBitmap bitmap;
- bitmap.setConfig(SkBitmap::kARGB_8888_Config,
- image->width,
- image->height,
- image->bytes_per_line);
- if (!bitmap.allocPixels())
- return;
- bitmap.setIsOpaque(true);
-
- const size_t bitmap_size = bitmap.getSize();
- DCHECK_EQ(bitmap_size,
- static_cast<size_t>(image->height * image->bytes_per_line));
- unsigned char* pixels = static_cast<unsigned char*>(bitmap.getPixels());
- memcpy(pixels, image->data, bitmap_size);
-
- scoped_callback_runner.Release();
- callback.Run(true, bitmap);
+ // Grab the snapshot from the renderer as that's the only reliable way to
+ // readback from the GPU for this platform right now.
+ GetRenderWidgetHost()->GetSnapshotFromRenderer(src_subrect, callback);
}
void RenderWidgetHostViewGtk::CopyFromCompositingSurfaceToVideoFrame(

Powered by Google App Engine
This is Rietveld 408576698