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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp

Issue 2823003002: SkBitmap and SkPixelRef no longer need lock/unlock (Closed)
Patch Set: win fix after rebase Created 3 years, 8 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 1226 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 SkBitmap new_bitmap; 1237 SkBitmap new_bitmap;
1238 new_bitmap.allocPixels( 1238 new_bitmap.allocPixels(
1239 SkImageInfo::MakeN32Premul(rect.Width(), rect.Height())); 1239 SkImageInfo::MakeN32Premul(rect.Width(), rect.Height()));
1240 { 1240 {
1241 SkiaPaintCanvas canvas(new_bitmap); 1241 SkiaPaintCanvas canvas(new_bitmap);
1242 canvas.clear(SK_ColorTRANSPARENT); 1242 canvas.clear(SK_ColorTRANSPARENT);
1243 canvas.translate(-rect.X(), -rect.Y()); 1243 canvas.translate(-rect.X(), -rect.Y());
1244 canvas.drawPicture(std::move(new_record)); 1244 canvas.drawPicture(std::move(new_record));
1245 } 1245 }
1246 1246
1247 old_bitmap.lockPixels();
1248 new_bitmap.lockPixels();
1249 int mismatching_pixels = 0; 1247 int mismatching_pixels = 0;
1250 static const int kMaxMismatchesToReport = 50; 1248 static const int kMaxMismatchesToReport = 50;
1251 for (int bitmap_y = 0; bitmap_y < rect.Height(); ++bitmap_y) { 1249 for (int bitmap_y = 0; bitmap_y < rect.Height(); ++bitmap_y) {
1252 int layer_y = bitmap_y + rect.Y(); 1250 int layer_y = bitmap_y + rect.Y();
1253 for (int bitmap_x = 0; bitmap_x < rect.Width(); ++bitmap_x) { 1251 for (int bitmap_x = 0; bitmap_x < rect.Width(); ++bitmap_x) {
1254 int layer_x = bitmap_x + rect.X(); 1252 int layer_x = bitmap_x + rect.X();
1255 SkColor old_pixel = old_bitmap.getColor(bitmap_x, bitmap_y); 1253 SkColor old_pixel = old_bitmap.getColor(bitmap_x, bitmap_y);
1256 SkColor new_pixel = new_bitmap.getColor(bitmap_x, bitmap_y); 1254 SkColor new_pixel = new_bitmap.getColor(bitmap_x, bitmap_y);
1257 if (PixelsDiffer(old_pixel, new_pixel) && 1255 if (PixelsDiffer(old_pixel, new_pixel) &&
1258 !tracking->raster_invalidation_region_since_last_paint.Contains( 1256 !tracking->raster_invalidation_region_since_last_paint.Contains(
(...skipping 11 matching lines...) Expand all
1270 LOG(ERROR) << "and more..."; 1268 LOG(ERROR) << "and more...";
1271 } 1269 }
1272 ++mismatching_pixels; 1270 ++mismatching_pixels;
1273 *new_bitmap.getAddr32(bitmap_x, bitmap_y) = 1271 *new_bitmap.getAddr32(bitmap_x, bitmap_y) =
1274 SkColorSetARGB(0xFF, 0xA0, 0, 0); // Dark red. 1272 SkColorSetARGB(0xFF, 0xA0, 0, 0); // Dark red.
1275 } else { 1273 } else {
1276 *new_bitmap.getAddr32(bitmap_x, bitmap_y) = SK_ColorTRANSPARENT; 1274 *new_bitmap.getAddr32(bitmap_x, bitmap_y) = SK_ColorTRANSPARENT;
1277 } 1275 }
1278 } 1276 }
1279 } 1277 }
1280 old_bitmap.unlockPixels();
1281 new_bitmap.unlockPixels();
1282 1278
1283 // Visualize under-invalidations by overlaying the new bitmap (containing red 1279 // Visualize under-invalidations by overlaying the new bitmap (containing red
1284 // pixels indicating under-invalidations, and transparent pixels otherwise) 1280 // pixels indicating under-invalidations, and transparent pixels otherwise)
1285 // onto the painting. 1281 // onto the painting.
1286 PaintRecorder recorder; 1282 PaintRecorder recorder;
1287 recorder.beginRecording(rect); 1283 recorder.beginRecording(rect);
1288 recorder.getRecordingCanvas()->drawBitmap(new_bitmap, rect.X(), rect.Y()); 1284 recorder.getRecordingCanvas()->drawBitmap(new_bitmap, rect.X(), rect.Y());
1289 sk_sp<PaintRecord> record = recorder.finishRecordingAsPicture(); 1285 sk_sp<PaintRecord> record = recorder.finishRecordingAsPicture();
1290 GetPaintController().AppendDebugDrawingAfterCommit( 1286 GetPaintController().AppendDebugDrawingAfterCommit(
1291 *this, record, OffsetFromLayoutObjectWithSubpixelAccumulation()); 1287 *this, record, OffsetFromLayoutObjectWithSubpixelAccumulation());
1292 } 1288 }
1293 1289
1294 } // namespace blink 1290 } // namespace blink
1295 1291
1296 #ifndef NDEBUG 1292 #ifndef NDEBUG
1297 void showGraphicsLayerTree(const blink::GraphicsLayer* layer) { 1293 void showGraphicsLayerTree(const blink::GraphicsLayer* layer) {
1298 if (!layer) { 1294 if (!layer) {
1299 LOG(INFO) << "Cannot showGraphicsLayerTree for (nil)."; 1295 LOG(INFO) << "Cannot showGraphicsLayerTree for (nil).";
1300 return; 1296 return;
1301 } 1297 }
1302 1298
1303 String output = layer->LayerTreeAsText(blink::kLayerTreeIncludesDebugInfo); 1299 String output = layer->LayerTreeAsText(blink::kLayerTreeIncludesDebugInfo);
1304 LOG(INFO) << output.Utf8().Data(); 1300 LOG(INFO) << output.Utf8().Data();
1305 } 1301 }
1306 #endif 1302 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698