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

Unified Diff: third_party/WebKit/Source/platform/graphics/paint/RasterInvalidationTracking.h

Issue 2380683006: SPv2: Add support for tracking raster paint invalidations in testing. (Closed)
Patch Set: none Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/graphics/paint/RasterInvalidationTracking.h
diff --git a/third_party/WebKit/Source/platform/graphics/paint/RasterInvalidationTracking.h b/third_party/WebKit/Source/platform/graphics/paint/RasterInvalidationTracking.h
new file mode 100644
index 0000000000000000000000000000000000000000..3588d0190b2539d7ff1d59d364459536681f1c2d
--- /dev/null
+++ b/third_party/WebKit/Source/platform/graphics/paint/RasterInvalidationTracking.h
@@ -0,0 +1,90 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef RasterInvalidationTracking_h
+#define RasterInvalidationTracking_h
+
+#include "platform/geometry/IntRect.h"
+#include "platform/geometry/Region.h"
+#include "platform/graphics/PaintInvalidationReason.h"
+#include "platform/json/JSONValues.h"
+#include "third_party/skia/include/core/SkColor.h"
+#include "third_party/skia/include/core/SkPicture.h"
+#include "wtf/Allocator.h"
+#include "wtf/text/WTFString.h"
+
+namespace blink {
+
+class DisplayItemClient;
+
+struct RasterInvalidationInfo {
+ DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
+ // This is for comparison only. Don't dereference because the client may have died.
+ const DisplayItemClient* client;
+ String clientDebugName;
+ IntRect rect;
+ PaintInvalidationReason reason;
+ RasterInvalidationInfo() : reason(PaintInvalidationFull) {}
+};
+
+inline bool operator==(const RasterInvalidationInfo& a,
+ const RasterInvalidationInfo& b) {
+ return a.rect == b.rect;
+}
+
+struct UnderPaintInvalidation {
+ DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
+ int x;
+ int y;
+ SkColor oldPixel;
+ SkColor newPixel;
+};
+
+struct PLATFORM_EXPORT RasterInvalidationTracking {
+ DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
+ Vector<RasterInvalidationInfo> trackedRasterInvalidations;
+ sk_sp<SkPicture> lastPaintedPicture;
+ IntRect lastInterestRect;
+ Region rasterInvalidationRegionSinceLastPaint;
+ Vector<UnderPaintInvalidation> underPaintInvalidations;
+
+ void asJSON(JSONObject*);
+};
+
+template <class TargetClass>
+class PLATFORM_EXPORT RasterInvalidationTrackingMap {
+ public:
+ void asJSON(TargetClass* key, JSONObject* json) {
+ auto it = m_invalidationTrackingMap.find(key);
+ if (it != m_invalidationTrackingMap.end())
+ it->value.asJSON(json);
+ }
+
+ void remove(TargetClass* key) {
+ auto it = m_invalidationTrackingMap.find(key);
+ if (it != m_invalidationTrackingMap.end())
+ m_invalidationTrackingMap.remove(it);
+ }
+
+ RasterInvalidationTracking& add(TargetClass* key) {
+ return m_invalidationTrackingMap.add(key, RasterInvalidationTracking())
+ .storedValue->value;
+ }
+
+ RasterInvalidationTracking* find(TargetClass* key) {
+ auto it = m_invalidationTrackingMap.find(key);
+ if (it == m_invalidationTrackingMap.end())
+ return nullptr;
+ return &it->value;
+ }
+
+ private:
+ typedef HashMap<TargetClass*, RasterInvalidationTracking>
+ InvalidationTrackingMap;
+ InvalidationTrackingMap m_invalidationTrackingMap;
+};
+
+} // namespace blink
+
+#endif // RasterInvalidationTracking_h

Powered by Google App Engine
This is Rietveld 408576698