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

Unified Diff: chrome/browser/renderer_host/render_widget_host_view_views.cc

Issue 6246129: BackingStoreSkia: Use skia for painting in RenderWidgetHostViewViews. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: '' Created 9 years, 10 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 | « chrome/browser/renderer_host/backing_store_skia.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/renderer_host/render_widget_host_view_views.cc
diff --git a/chrome/browser/renderer_host/render_widget_host_view_views.cc b/chrome/browser/renderer_host/render_widget_host_view_views.cc
index 410b4b12e818abcc8516884b39817cbf77f19efe..cd38138c4796700c8aa0792f3707f788bea8da96 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_views.cc
+++ b/chrome/browser/renderer_host/render_widget_host_view_views.cc
@@ -14,6 +14,7 @@
#include "base/string_number_conversions.h"
#include "base/task.h"
#include "base/time.h"
+#include "chrome/browser/renderer_host/backing_store_skia.h"
#include "chrome/browser/renderer_host/backing_store_x.h"
#include "chrome/browser/renderer_host/render_widget_host.h"
#include "chrome/common/native_web_keyboard_event.h"
@@ -25,6 +26,7 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/x/x11_util.h"
#include "ui/gfx/canvas.h"
+#include "ui/gfx/canvas_skia.h"
#include "views/events/event.h"
#include "views/ime/ime_context.h"
#include "views/widget/widget.h"
@@ -32,7 +34,8 @@
static const int kMaxWindowWidth = 4000;
static const int kMaxWindowHeight = 4000;
-static const char* kRenderWidgetHostViewKey = "__RENDER_WIDGET_HOST_VIEW__";
+static const char kRenderWidgetHostViewKey[] = "__RENDER_WIDGET_HOST_VIEW__";
+static const char kBackingStoreSkiaSwitch[] = "use-backing-store-skia";
// Copied from third_party/WebKit/Source/WebCore/page/EventHandler.cpp
//
@@ -57,6 +60,18 @@ const char RenderWidgetHostViewViews::kViewClassName[] =
namespace {
+bool UsingBackingStoreSkia() {
+ static bool decided = false;
+ static bool use_skia = false;
+ if (!decided) {
+ CommandLine* cmdline = CommandLine::ForCurrentProcess();
+ use_skia = (cmdline && cmdline->HasSwitch(kBackingStoreSkiaSwitch));
+ decided = true;
+ }
+
+ return use_skia;
+}
+
int WebInputEventFlagsFromViewsEvent(const views::Event& event) {
int modifiers = 0;
@@ -487,9 +502,14 @@ BackingStore* RenderWidgetHostViewViews::AllocBackingStore(
gfx::NativeView nview = GetInnerNativeView();
if (!nview)
return NULL;
- return new BackingStoreX(host_, size,
- ui::GetVisualFromGtkWidget(nview),
- gtk_widget_get_visual(nview)->depth);
+
+ if (UsingBackingStoreSkia()) {
+ return new BackingStoreSkia(host_, size);
+ } else {
+ return new BackingStoreX(host_, size,
+ ui::GetVisualFromGtkWidget(nview),
+ gtk_widget_get_visual(nview)->depth);
+ }
}
gfx::NativeView RenderWidgetHostViewViews::GetInnerNativeView() const {
@@ -540,8 +560,7 @@ void RenderWidgetHostViewViews::Paint(gfx::Canvas* canvas) {
ConvertPointToWidget(this, &origin);
about_to_validate_and_paint_ = true;
- BackingStoreX* backing_store = static_cast<BackingStoreX*>(
- host_->GetBackingStore(true));
+ BackingStore* backing_store = host_->GetBackingStore(true);
// Calling GetBackingStore maybe have changed |invalid_rect_|...
about_to_validate_and_paint_ = false;
@@ -556,9 +575,15 @@ void RenderWidgetHostViewViews::Paint(gfx::Canvas* canvas) {
if (!visually_deemphasized_) {
// In the common case, use XCopyArea. We don't draw more than once, so
// we don't need to double buffer.
- backing_store->XShowRect(origin,
- paint_rect, ui::GetX11WindowFromGdkWindow(window));
- } else {
+
+ if (UsingBackingStoreSkia()) {
+ static_cast<BackingStoreSkia*>(backing_store)->SkiaShowRect(
+ gfx::Point(paint_rect.x(), paint_rect.y()), canvas);
+ } else {
+ static_cast<BackingStoreX*>(backing_store)->XShowRect(origin,
+ paint_rect, ui::GetX11WindowFromGdkWindow(window));
+ }
+ } else if (!UsingBackingStoreSkia()) {
// If the grey blend is showing, we make two drawing calls. Use double
// buffering to prevent flicker. Use CairoShowRect because XShowRect
// shortcuts GDK's double buffering.
@@ -566,7 +591,8 @@ void RenderWidgetHostViewViews::Paint(gfx::Canvas* canvas) {
paint_rect.width(), paint_rect.height() };
gdk_window_begin_paint_rect(window, &rect);
- backing_store->CairoShowRect(paint_rect, GDK_DRAWABLE(window));
+ static_cast<BackingStoreX*>(backing_store)->CairoShowRect(
+ paint_rect, GDK_DRAWABLE(window));
cairo_t* cr = gdk_cairo_create(window);
gdk_cairo_rectangle(cr, &rect);
@@ -575,6 +601,9 @@ void RenderWidgetHostViewViews::Paint(gfx::Canvas* canvas) {
cairo_destroy(cr);
gdk_window_end_paint(window);
+ } else {
+ // TODO(sad)
+ NOTIMPLEMENTED();
}
}
if (!whiteout_start_time_.is_null()) {
« no previous file with comments | « chrome/browser/renderer_host/backing_store_skia.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698