123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- // 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 CC_LAYERS_LAYER_LIST_ITERATOR_H_
- #define CC_LAYERS_LAYER_LIST_ITERATOR_H_
- #include <stdlib.h>
- #include <vector>
- #include "base/memory/raw_ptr.h"
- #include "base/memory/raw_ptr_exclusion.h"
- #include "cc/cc_export.h"
- namespace cc {
- class Layer;
- // This visits a tree of layers in drawing order.
- class CC_EXPORT LayerListIterator {
- public:
- explicit LayerListIterator(Layer* root_layer);
- LayerListIterator(const LayerListIterator& other);
- ~LayerListIterator();
- bool operator==(const LayerListIterator& other) const {
- return current_layer_ == other.current_layer_;
- }
- bool operator!=(const LayerListIterator& other) const {
- return !(*this == other);
- }
- // We will only support prefix increment.
- LayerListIterator& operator++();
- Layer* operator->() const { return current_layer_; }
- Layer* operator*() const { return current_layer_; }
- private:
- // The implementation of this iterator is currently tied tightly to the layer
- // tree, but it should be straightforward to reimplement in terms of a list
- // when it's ready.
- // `current_layer` is not a raw_ptr<...> for performance reasons (based on
- // analysis of sampling profiler data and tab_search:top100:2020).
- RAW_PTR_EXCLUSION Layer* current_layer_;
- std::vector<size_t> list_indices_;
- };
- class CC_EXPORT LayerListConstIterator {
- public:
- explicit LayerListConstIterator(const Layer* root_layer);
- LayerListConstIterator(const LayerListConstIterator& other);
- ~LayerListConstIterator();
- bool operator==(const LayerListConstIterator& other) const {
- return current_layer_ == other.current_layer_;
- }
- bool operator!=(const LayerListConstIterator& other) const {
- return !(*this == other);
- }
- // We will only support prefix increment.
- LayerListConstIterator& operator++();
- const Layer* operator->() const { return current_layer_; }
- const Layer* operator*() const { return current_layer_; }
- private:
- raw_ptr<const Layer> current_layer_;
- std::vector<size_t> list_indices_;
- };
- class CC_EXPORT LayerListReverseIterator {
- public:
- explicit LayerListReverseIterator(Layer* root_layer);
- LayerListReverseIterator(const LayerListReverseIterator& other);
- ~LayerListReverseIterator();
- bool operator==(const LayerListReverseIterator& other) const {
- return current_layer_ == other.current_layer_;
- }
- bool operator!=(const LayerListReverseIterator& other) const {
- return !(*this == other);
- }
- // We will only support prefix increment.
- LayerListReverseIterator& operator++();
- Layer* operator->() const { return current_layer_; }
- Layer* operator*() const { return current_layer_; }
- private:
- void DescendToRightmostInSubtree();
- raw_ptr<Layer> current_layer_;
- std::vector<size_t> list_indices_;
- };
- class CC_EXPORT LayerListReverseConstIterator {
- public:
- explicit LayerListReverseConstIterator(const Layer* root_layer);
- LayerListReverseConstIterator(const LayerListReverseConstIterator& other);
- ~LayerListReverseConstIterator();
- bool operator==(const LayerListReverseConstIterator& other) const {
- return current_layer_ == other.current_layer_;
- }
- bool operator!=(const LayerListReverseConstIterator& other) const {
- return !(*this == other);
- }
- // We will only support prefix increment.
- LayerListReverseConstIterator& operator++();
- const Layer* operator->() const { return current_layer_; }
- const Layer* operator*() const { return current_layer_; }
- private:
- void DescendToRightmostInSubtree();
- raw_ptr<const Layer> current_layer_;
- std::vector<size_t> list_indices_;
- };
- } // namespace cc
- #endif // CC_LAYERS_LAYER_LIST_ITERATOR_H_
|