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

Unified Diff: cc/tiles/checker_image_tracker.h

Issue 2668873002: cc: Add checker-imaging support to TileManager. (Closed)
Patch Set: remove include Created 3 years, 10 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
« no previous file with comments | « cc/test/fake_tile_manager_client.h ('k') | cc/tiles/checker_image_tracker.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/tiles/checker_image_tracker.h
diff --git a/cc/tiles/checker_image_tracker.h b/cc/tiles/checker_image_tracker.h
new file mode 100644
index 0000000000000000000000000000000000000000..af0bc0e86f37b8927d342fb19dfdb0f04388a047
--- /dev/null
+++ b/cc/tiles/checker_image_tracker.h
@@ -0,0 +1,100 @@
+// Copyright 2017 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 CC_TILES_CHECKER_IMAGE_TRACKER_H_
+#define CC_TILES_CHECKER_IMAGE_TRACKER_H_
+
+#include <unordered_map>
+#include <vector>
+
+#include "cc/base/cc_export.h"
+#include "cc/playback/image_id.h"
+#include "cc/tiles/image_controller.h"
+#include "third_party/skia/include/core/SkImage.h"
+
+namespace cc {
+
+class CC_EXPORT CheckerImageTrackerClient {
+ public:
+ virtual ~CheckerImageTrackerClient() = default;
+
+ virtual void NeedsInvalidationForCheckerImagedTiles() = 0;
+};
+
+// CheckerImageTracker is used to track the set of images in a frame which are
+// decoded asynchronously, using the ImageDecodeService, from the rasterization
+// of tiles which depend on them. Once decoded, these images are stored for
+// invalidation on the next sync tree. TakeImagesToInvalidateOnSyncTree will
+// return this set and maintain a copy to keeps these images locked until the
+// sync tree is activated.
+// Note: It is illegal to call TakeImagesToInvalidateOnSyncTree for the next
+// sync tree until the previous tree is activated.
+class CC_EXPORT CheckerImageTracker {
+ public:
+ CheckerImageTracker(ImageController* image_controller,
+ CheckerImageTrackerClient* client,
+ bool enable_checker_imaging);
+ ~CheckerImageTracker();
+
+ // Given the |images| for a tile, filters the images which will be deferred
+ // asynchronously using the image decoded service, eliminating them from
+ // |images| adds them to the |checkered_images| set, so they can be skipped
+ // during the rasterization of this tile.
+ // The entries remaining in |images| are for images for which a cached decode
+ // from the image decode service is available, or which must be decoded before
+ // before this tile can be rasterized.
+ void FilterImagesForCheckeringForTile(std::vector<DrawImage>* images,
+ ImageIdFlatSet* checkered_images,
+ WhichTree tree);
+
+ // Returns the set of images to invalidate on the sync tree.
+ const ImageIdFlatSet& TakeImagesToInvalidateOnSyncTree();
+
+ void DidActivateSyncTree();
+
+ private:
+ void DidFinishImageDecode(ImageId image_id,
+ ImageController::ImageDecodeRequestId request_id);
+
+ // Returns true if the decode for |image| will be deferred to the image decode
+ // service and it should be be skipped during raster.
+ bool ShouldCheckerImage(const sk_sp<const SkImage>& image,
+ WhichTree tree) const;
+
+ void ScheduleImageDecodeIfNecessary(const sk_sp<const SkImage>& image);
+
+ ImageController* image_controller_;
+ CheckerImageTrackerClient* client_;
+ const bool enable_checker_imaging_;
+
+ // A set of images which have been decoded and are pending invalidation for
+ // raster on the checkered tiles.
+ ImageIdFlatSet images_pending_invalidation_;
+
+ // A set of images which were invalidated on the current sync tree.
+ ImageIdFlatSet invalidated_images_on_current_sync_tree_;
+
+ // A set of images which are currently pending decode from the image decode
+ // service.
+ // TODO(khushalsagar): This should be a queue that gets re-built each time we
+ // do a PrepareTiles? See crbug.com/689184.
+ ImageIdFlatSet pending_image_decodes_;
+
+ // A set of images which have been decoded at least once from the
+ // ImageDecodeService and should not be checkered again.
+ // TODO(khushalsagar): Limit the size of this set.
+ // TODO(khushalsagar): Plumb navigation changes here to reset this. See
+ // crbug.com/693228.
+ std::unordered_set<ImageId> images_decoded_once_;
+
+ // A map of image id to image decode request id for images to be unlocked.
+ std::unordered_map<ImageId, ImageController::ImageDecodeRequestId>
+ image_id_to_decode_request_id_;
+
+ base::WeakPtrFactory<CheckerImageTracker> weak_factory_;
+};
+
+} // namespace cc
+
+#endif // CC_TILES_CHECKER_IMAGE_TRACKER_H_
« no previous file with comments | « cc/test/fake_tile_manager_client.h ('k') | cc/tiles/checker_image_tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698