add optional updateMatrixClip param to getTopDevice(). Chrome should set this
authorreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 19 Mar 2012 18:26:34 +0000 (18:26 +0000)
committerreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 19 Mar 2012 18:26:34 +0000 (18:26 +0000)
only when it is needed, and in doing so it can stop using the layeriter just
to get its top device.

git-svn-id: http://skia.googlecode.com/svn/trunk@3432 2bbb7eff-a529-9590-31e7-b0007b416f81

include/core/SkCanvas.h
src/core/SkCanvas.cpp

index e5cd8ae..7ad88f6 100644 (file)
@@ -91,8 +91,14 @@ public:
      *  installed. Note that this can change on other calls like save/restore,
      *  so do not access this device after subsequent canvas calls.
      *  The reference count of the device is not changed.
+     *
+     * @param updateMatrixClip If this is true, then before the device is
+     *        returned, we ensure that its has been notified about the current
+     *        matrix and clip. Note: this happens automatically when the device
+     *        is drawn to, but is optional here, as there is a small perf hit
+     *        sometimes.
      */
-    SkDevice* getTopDevice() const;
+    SkDevice* getTopDevice(bool updateMatrixClip = false) const;
 
     /**
      *  Create a new raster device and make it current. This also returns
index aa92dd0..1cd9d71 100644 (file)
@@ -490,7 +490,10 @@ SkDevice* SkCanvas::getDevice() const {
     return rec->fLayer->fDevice;
 }
 
-SkDevice* SkCanvas::getTopDevice() const {
+SkDevice* SkCanvas::getTopDevice(bool updateMatrixClip) const {
+    if (updateMatrixClip) {
+        const_cast<SkCanvas*>(this)->updateDeviceCMCache();
+    }
     return fMCRec->fTopLayer->fDevice;
 }