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

Side by Side Diff: src/core/SkRecordOpts.cpp

Issue 1567063002: Revert[2] of "add backdrop option to SaveLayerRec" (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: don't optimize-away the layer if there is a backdrop Created 4 years, 11 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 unified diff | Download patch
« no previous file with comments | « src/core/SkRecordDraw.cpp ('k') | src/core/SkRecorder.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkRecordOpts.h" 8 #include "SkRecordOpts.h"
9 9
10 #include "SkRecordPattern.h" 10 #include "SkRecordPattern.h"
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 // Run until they stop changing things. 170 // Run until they stop changing things.
171 while (apply(&onlyDraws, record) || apply(&noDraws, record)); 171 while (apply(&onlyDraws, record) || apply(&noDraws, record));
172 } 172 }
173 173
174 // For some SaveLayer-[drawing command]-Restore patterns, merge the SaveLayer's alpha into the 174 // For some SaveLayer-[drawing command]-Restore patterns, merge the SaveLayer's alpha into the
175 // draw, and no-op the SaveLayer and Restore. 175 // draw, and no-op the SaveLayer and Restore.
176 struct SaveLayerDrawRestoreNooper { 176 struct SaveLayerDrawRestoreNooper {
177 typedef Pattern<Is<SaveLayer>, IsDraw, Is<Restore>> Match; 177 typedef Pattern<Is<SaveLayer>, IsDraw, Is<Restore>> Match;
178 178
179 bool onMatch(SkRecord* record, Match* match, int begin, int end) { 179 bool onMatch(SkRecord* record, Match* match, int begin, int end) {
180 if (match->first<SaveLayer>()->backdrop) {
181 // can't throw away the layer if we have a backdrop
182 return false;
183 }
184
180 // A SaveLayer's bounds field is just a hint, so we should be free to ig nore it. 185 // A SaveLayer's bounds field is just a hint, so we should be free to ig nore it.
181 SkPaint* layerPaint = match->first<SaveLayer>()->paint; 186 SkPaint* layerPaint = match->first<SaveLayer>()->paint;
182 if (nullptr == layerPaint) { 187 if (nullptr == layerPaint) {
183 // There wasn't really any point to this SaveLayer at all. 188 // There wasn't really any point to this SaveLayer at all.
184 return KillSaveLayerAndRestore(record, begin); 189 return KillSaveLayerAndRestore(record, begin);
185 } 190 }
186 191
187 SkPaint* drawPaint = match->second<SkPaint>(); 192 SkPaint* drawPaint = match->second<SkPaint>();
188 if (drawPaint == nullptr) { 193 if (drawPaint == nullptr) {
189 // We can just give the draw the SaveLayer's paint. 194 // We can just give the draw the SaveLayer's paint.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 } 245 }
241 246
242 if (!fold_opacity_layer_color_to_paint(*opacityPaint, true /*isSaveLayer */, 247 if (!fold_opacity_layer_color_to_paint(*opacityPaint, true /*isSaveLayer */,
243 filterLayerPaint)) { 248 filterLayerPaint)) {
244 return false; 249 return false;
245 } 250 }
246 251
247 return KillSaveLayerAndRestore(record, begin); 252 return KillSaveLayerAndRestore(record, begin);
248 } 253 }
249 254
250 static bool KillSaveLayerAndRestore(SkRecord* record, int saveLayerIndex) { 255 static bool KillSaveLayerAndRestore(SkRecord* record, int saveLayerIndex) {
mtklein 2016/01/07 18:27:42 This one too?
reed1 2016/01/07 19:09:18 Done.
251 record->replace<NoOp>(saveLayerIndex); // SaveLayer 256 record->replace<NoOp>(saveLayerIndex); // SaveLayer
252 record->replace<NoOp>(saveLayerIndex + 6); // Restore 257 record->replace<NoOp>(saveLayerIndex + 6); // Restore
253 return true; 258 return true;
254 } 259 }
255 }; 260 };
256 261
257 void SkRecordMergeSvgOpacityAndFilterLayers(SkRecord* record) { 262 void SkRecordMergeSvgOpacityAndFilterLayers(SkRecord* record) {
258 SvgOpacityAndFilterLayerMergePass pass; 263 SvgOpacityAndFilterLayerMergePass pass;
259 apply(&pass, record); 264 apply(&pass, record);
260 } 265 }
(...skipping 15 matching lines...) Expand all
276 281
277 void SkRecordOptimize2(SkRecord* record) { 282 void SkRecordOptimize2(SkRecord* record) {
278 multiple_set_matrices(record); 283 multiple_set_matrices(record);
279 SkRecordNoopSaveRestores(record); 284 SkRecordNoopSaveRestores(record);
280 SkRecordNoopSaveLayerDrawRestores(record); 285 SkRecordNoopSaveLayerDrawRestores(record);
281 SkRecordMergeSvgOpacityAndFilterLayers(record); 286 SkRecordMergeSvgOpacityAndFilterLayers(record);
282 287
283 record->defrag(); 288 record->defrag();
284 } 289 }
285 290
OLDNEW
« no previous file with comments | « src/core/SkRecordDraw.cpp ('k') | src/core/SkRecorder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698