diff options
author | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-09 23:07:10 +0000 |
---|---|---|
committer | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-09 23:07:10 +0000 |
commit | 40bad03889d4fc90799fdfe39a3fd503cdfb492e (patch) | |
tree | 97aaad871aabb0c5d6610a2f6b5cd090cab2ecf2 /chrome/browser/gtk/custom_button.h | |
parent | cdbb8e420ace50fb0fe7bf57f82f000b45ed09cd (diff) | |
download | chromium_src-40bad03889d4fc90799fdfe39a3fd503cdfb492e.zip chromium_src-40bad03889d4fc90799fdfe39a3fd503cdfb492e.tar.gz chromium_src-40bad03889d4fc90799fdfe39a3fd503cdfb492e.tar.bz2 |
Upload GdkPixbufs into cairo surfaces so they (hopefully) live on the X server and have better performance. In the presence of XRender, let cairo do things smarter.
This is a big win performance wise. BrowserWindowGtk::OnCustomFrameExpose, a heavy user of images sped up from an average runtime of 20.5ms to 0.7ms.
TEST=Run through valgrind, don't leak memory.
TEST=Run both before and after using xtrace. Notice fewer XCreatePixmap requests and more XRender-CreatePicture requests.
BUG=http://crbug.com/10499
Review URL: http://codereview.chromium.org/197046
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25814 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/custom_button.h')
-rw-r--r-- | chrome/browser/gtk/custom_button.h | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/chrome/browser/gtk/custom_button.h b/chrome/browser/gtk/custom_button.h index 768b4ca..27dc275 100644 --- a/chrome/browser/gtk/custom_button.h +++ b/chrome/browser/gtk/custom_button.h @@ -16,6 +16,7 @@ #include "chrome/common/owned_widget_gtk.h" #include "third_party/skia/include/core/SkBitmap.h" +class CairoCachedSurface; class GtkThemeProvider; // These classes implement two kinds of custom-drawn buttons. They're @@ -36,7 +37,9 @@ class CustomDrawButtonBase : public NotificationObserver { ~CustomDrawButtonBase(); - GdkPixbuf* pixbufs(int i) const { return pixbufs_[i]; } + // Returns the dimensions of the first surface. + int Width() const; + int Height() const; gboolean OnExpose(GtkWidget* widget, GdkEventExpose* e); @@ -52,12 +55,12 @@ class CustomDrawButtonBase : public NotificationObserver { const NotificationDetails& details); private: - // We store one GdkPixbuf* for each possible state of the button; + // We store one surface for each possible state of the button; // INSENSITIVE is the last available state; - GdkPixbuf* pixbufs_[GTK_STATE_INSENSITIVE + 1]; + scoped_ptr<CairoCachedSurface> surfaces_[GTK_STATE_INSENSITIVE + 1]; // The background image. - GdkPixbuf* background_image_; + scoped_ptr<CairoCachedSurface> background_image_; // If non-negative, the state to paint the button. int paint_override_; |