virtual for saveCamera

Change-Id: Iff486ae8dbf94971cfd513954299e2635c13ef1e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/281585
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index b3f4a16..c496caa 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -742,14 +742,18 @@
     FOR_EACH_TOP_DEVICE(device->setInvCamera(invc));
 }
 
-int SkCanvas::saveCamera(const SkM44& projection, const SkM44& camera) {
-    // TODO: add a virtual for this, and update clients (e.g. chrome)
-    int n = this->save();
-    this->concat(projection * camera);
+// Don't trigger other virtuals from onSaveCamera
+void SkCanvas::onSaveCamera(const SkM44& projection, const SkM44& camera) {
+    (void)this->save();
+    this->internalConcat44(projection * camera);
+
     fCameraStack.push_back(CameraRec(fMCRec, camera));
     this->notifyCameraChanged();
+}
 
-    return n;
+int SkCanvas::saveCamera(const SkM44& projection, const SkM44& camera) {
+    this->onSaveCamera(projection, camera);
+    return this->getSaveCount();
 }
 
 void SkCanvas::restore() {
@@ -1524,7 +1528,7 @@
     this->didConcat(matrix);
 }
 
-void SkCanvas::concat(const SkM44& m) {
+void SkCanvas::internalConcat44(const SkM44& m) {
     this->checkForDeferredSave();
 
     fMCRec->fMatrix.preConcat(m);
@@ -1532,8 +1536,12 @@
     fIsScaleTranslate = fMCRec->fMatrix.isScaleTranslate();
 
     FOR_EACH_TOP_DEVICE(device->setGlobalCTM(fMCRec->fMatrix));
+}
 
-    this->didConcat44(SkMatrixPriv::M44ColMajor(m));
+void SkCanvas::concat(const SkM44& m) {
+    this->internalConcat44(m);
+
+    this->didConcat44(SkMatrixPriv::M44ColMajor(m));    // notify subclasses
 }
 
 void SkCanvas::internalSetMatrix(const SkMatrix& matrix) {