Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 279 if (PaintWithoutCommit(interest_rect, disabled_mode)) { | 279 if (PaintWithoutCommit(interest_rect, disabled_mode)) { |
| 280 GetPaintController().CommitNewDisplayItems( | 280 GetPaintController().CommitNewDisplayItems( |
| 281 OffsetFromLayoutObjectWithSubpixelAccumulation()); | 281 OffsetFromLayoutObjectWithSubpixelAccumulation()); |
| 282 if (RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled()) { | 282 if (RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled()) { |
| 283 sk_sp<PaintRecord> record = CaptureRecord(); | 283 sk_sp<PaintRecord> record = CaptureRecord(); |
| 284 CheckPaintUnderInvalidations(record); | 284 CheckPaintUnderInvalidations(record); |
| 285 RasterInvalidationTracking& tracking = | 285 RasterInvalidationTracking& tracking = |
| 286 GetRasterInvalidationTrackingMap().Add(this); | 286 GetRasterInvalidationTrackingMap().Add(this); |
| 287 tracking.last_painted_record = std::move(record); | 287 tracking.last_painted_record = std::move(record); |
| 288 tracking.last_interest_rect = previous_interest_rect_; | 288 tracking.last_interest_rect = previous_interest_rect_; |
| 289 tracking.raster_invalidation_region_since_last_paint = Region(); | 289 tracking.invalidation_region_since_last_paint = Region(); |
| 290 } | 290 } |
| 291 } | 291 } |
| 292 } | 292 } |
| 293 | 293 |
| 294 bool GraphicsLayer::PaintWithoutCommit( | 294 bool GraphicsLayer::PaintWithoutCommit( |
| 295 const IntRect* interest_rect, | 295 const IntRect* interest_rect, |
| 296 GraphicsContext::DisabledMode disabled_mode) { | 296 GraphicsContext::DisabledMode disabled_mode) { |
| 297 DCHECK(DrawsContent()); | 297 DCHECK(DrawsContent()); |
| 298 | 298 |
| 299 if (!client_) | 299 if (!client_) |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 475 is_tracking_raster_invalidations_ = tracks_raster_invalidations; | 475 is_tracking_raster_invalidations_ = tracks_raster_invalidations; |
| 476 } | 476 } |
| 477 | 477 |
| 478 void GraphicsLayer::ResetTrackedRasterInvalidations() { | 478 void GraphicsLayer::ResetTrackedRasterInvalidations() { |
| 479 RasterInvalidationTracking* tracking = | 479 RasterInvalidationTracking* tracking = |
| 480 GetRasterInvalidationTrackingMap().Find(this); | 480 GetRasterInvalidationTrackingMap().Find(this); |
| 481 if (!tracking) | 481 if (!tracking) |
| 482 return; | 482 return; |
| 483 | 483 |
| 484 if (RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled()) | 484 if (RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled()) |
| 485 tracking->tracked_raster_invalidations.clear(); | 485 tracking->tracked_invalidations.clear(); |
| 486 else | 486 else |
| 487 GetRasterInvalidationTrackingMap().Remove(this); | 487 GetRasterInvalidationTrackingMap().Remove(this); |
| 488 } | 488 } |
| 489 | 489 |
| 490 bool GraphicsLayer::HasTrackedRasterInvalidations() const { | 490 bool GraphicsLayer::HasTrackedRasterInvalidations() const { |
| 491 if (auto* tracking = GetRasterInvalidationTracking()) | 491 if (auto* tracking = GetRasterInvalidationTracking()) |
| 492 return !tracking->tracked_raster_invalidations.IsEmpty(); | 492 return !tracking->tracked_invalidations.IsEmpty(); |
| 493 return false; | 493 return false; |
| 494 } | 494 } |
| 495 | 495 |
| 496 const RasterInvalidationTracking* GraphicsLayer::GetRasterInvalidationTracking() | 496 const RasterInvalidationTracking* GraphicsLayer::GetRasterInvalidationTracking() |
| 497 const { | 497 const { |
| 498 return GetRasterInvalidationTrackingMap().Find(this); | 498 return GetRasterInvalidationTrackingMap().Find(this); |
| 499 } | 499 } |
| 500 | 500 |
| 501 void GraphicsLayer::TrackRasterInvalidation(const DisplayItemClient& client, | 501 void GraphicsLayer::TrackRasterInvalidation(const DisplayItemClient& client, |
| 502 const IntRect& rect, | 502 const IntRect& rect, |
| 503 PaintInvalidationReason reason) { | 503 PaintInvalidationReason reason) { |
| 504 if (!IsTrackingOrCheckingRasterInvalidations() || rect.IsEmpty()) | 504 if (!IsTrackingOrCheckingRasterInvalidations() || rect.IsEmpty()) |
| 505 return; | 505 return; |
| 506 | 506 |
| 507 RasterInvalidationTracking& tracking = | 507 RasterInvalidationInfo info; |
| 508 GetRasterInvalidationTrackingMap().Add(this); | 508 info.client = &client; |
| 509 | 509 info.client_debug_name = client.DebugName(); |
| 510 if (is_tracking_raster_invalidations_) { | 510 info.rect = rect; |
| 511 RasterInvalidationInfo info; | 511 info.reason = reason; |
| 512 info.client = &client; | 512 GetRasterInvalidationTrackingMap().AddInvalidation(this, info); |
| 513 info.client_debug_name = client.DebugName(); | |
| 514 info.rect = rect; | |
| 515 info.reason = reason; | |
| 516 tracking.tracked_raster_invalidations.push_back(info); | |
| 517 } | |
| 518 | |
| 519 if (RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled()) { | |
|
chrishtr
2017/05/10 17:25:33
No longer needed?
Xianzhu
2017/05/10 18:27:01
This is moved into RasterInvalidationTrackingMap::
| |
| 520 // TODO(crbug.com/496260): Some antialiasing effects overflow the paint | |
| 521 // invalidation rect. | |
| 522 IntRect r = rect; | |
| 523 r.Inflate(1); | |
| 524 tracking.raster_invalidation_region_since_last_paint.Unite(r); | |
| 525 } | |
| 526 } | 513 } |
| 527 | 514 |
| 528 template <typename T> | 515 template <typename T> |
| 529 static std::unique_ptr<JSONArray> PointAsJSONArray(const T& point) { | 516 static std::unique_ptr<JSONArray> PointAsJSONArray(const T& point) { |
| 530 std::unique_ptr<JSONArray> array = JSONArray::Create(); | 517 std::unique_ptr<JSONArray> array = JSONArray::Create(); |
| 531 array->PushDouble(point.X()); | 518 array->PushDouble(point.X()); |
| 532 array->PushDouble(point.Y()); | 519 array->PushDouble(point.Y()); |
| 533 return array; | 520 return array; |
| 534 } | 521 } |
| 535 | 522 |
| (...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1259 | 1246 |
| 1260 int mismatching_pixels = 0; | 1247 int mismatching_pixels = 0; |
| 1261 static const int kMaxMismatchesToReport = 50; | 1248 static const int kMaxMismatchesToReport = 50; |
| 1262 for (int bitmap_y = 0; bitmap_y < rect.Height(); ++bitmap_y) { | 1249 for (int bitmap_y = 0; bitmap_y < rect.Height(); ++bitmap_y) { |
| 1263 int layer_y = bitmap_y + rect.Y(); | 1250 int layer_y = bitmap_y + rect.Y(); |
| 1264 for (int bitmap_x = 0; bitmap_x < rect.Width(); ++bitmap_x) { | 1251 for (int bitmap_x = 0; bitmap_x < rect.Width(); ++bitmap_x) { |
| 1265 int layer_x = bitmap_x + rect.X(); | 1252 int layer_x = bitmap_x + rect.X(); |
| 1266 SkColor old_pixel = old_bitmap.getColor(bitmap_x, bitmap_y); | 1253 SkColor old_pixel = old_bitmap.getColor(bitmap_x, bitmap_y); |
| 1267 SkColor new_pixel = new_bitmap.getColor(bitmap_x, bitmap_y); | 1254 SkColor new_pixel = new_bitmap.getColor(bitmap_x, bitmap_y); |
| 1268 if (PixelsDiffer(old_pixel, new_pixel) && | 1255 if (PixelsDiffer(old_pixel, new_pixel) && |
| 1269 !tracking->raster_invalidation_region_since_last_paint.Contains( | 1256 !tracking->invalidation_region_since_last_paint.Contains( |
| 1270 IntPoint(layer_x, layer_y))) { | 1257 IntPoint(layer_x, layer_y))) { |
| 1271 if (mismatching_pixels < kMaxMismatchesToReport) { | 1258 if (mismatching_pixels < kMaxMismatchesToReport) { |
| 1272 UnderPaintInvalidation under_paint_invalidation = { | 1259 UnderRasterInvalidation under_invalidation = {layer_x, layer_y, |
| 1273 layer_x, layer_y, old_pixel, new_pixel}; | 1260 old_pixel, new_pixel}; |
| 1274 tracking->under_paint_invalidations.push_back( | 1261 tracking->under_invalidations.push_back(under_invalidation); |
| 1275 under_paint_invalidation); | |
| 1276 LOG(ERROR) << DebugName() | 1262 LOG(ERROR) << DebugName() |
| 1277 << " Uninvalidated old/new pixels mismatch at " << layer_x | 1263 << " Uninvalidated old/new pixels mismatch at " << layer_x |
| 1278 << "," << layer_y << " old:" << std::hex << old_pixel | 1264 << "," << layer_y << " old:" << std::hex << old_pixel |
| 1279 << " new:" << new_pixel; | 1265 << " new:" << new_pixel; |
| 1280 } else if (mismatching_pixels == kMaxMismatchesToReport) { | 1266 } else if (mismatching_pixels == kMaxMismatchesToReport) { |
| 1281 LOG(ERROR) << "and more..."; | 1267 LOG(ERROR) << "and more..."; |
| 1282 } | 1268 } |
| 1283 ++mismatching_pixels; | 1269 ++mismatching_pixels; |
| 1284 *new_bitmap.getAddr32(bitmap_x, bitmap_y) = | 1270 *new_bitmap.getAddr32(bitmap_x, bitmap_y) = |
| 1285 SkColorSetARGB(0xFF, 0xA0, 0, 0); // Dark red. | 1271 SkColorSetARGB(0xFF, 0xA0, 0, 0); // Dark red. |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 1306 void showGraphicsLayerTree(const blink::GraphicsLayer* layer) { | 1292 void showGraphicsLayerTree(const blink::GraphicsLayer* layer) { |
| 1307 if (!layer) { | 1293 if (!layer) { |
| 1308 LOG(INFO) << "Cannot showGraphicsLayerTree for (nil)."; | 1294 LOG(INFO) << "Cannot showGraphicsLayerTree for (nil)."; |
| 1309 return; | 1295 return; |
| 1310 } | 1296 } |
| 1311 | 1297 |
| 1312 String output = layer->LayerTreeAsText(blink::kLayerTreeIncludesDebugInfo); | 1298 String output = layer->LayerTreeAsText(blink::kLayerTreeIncludesDebugInfo); |
| 1313 LOG(INFO) << output.Utf8().data(); | 1299 LOG(INFO) << output.Utf8().data(); |
| 1314 } | 1300 } |
| 1315 #endif | 1301 #endif |
| OLD | NEW |