1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- // Copyright 2021 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_PAINT_SKOTTIE_MRU_RESOURCE_PROVIDER_H_
- #define CC_PAINT_SKOTTIE_MRU_RESOURCE_PROVIDER_H_
- #include <string>
- #include "base/containers/flat_map.h"
- #include "base/sequence_checker.h"
- #include "cc/paint/paint_export.h"
- #include "cc/paint/skottie_resource_metadata.h"
- #include "cc/paint/skottie_wrapper.h"
- #include "third_party/skia/modules/skresources/include/SkResources.h"
- #include "ui/gfx/geometry/size.h"
- namespace cc {
- // Provides Skottie the most recent SkImage that was returned by a
- // SkottieWrapper::FrameDataCallback for each ImageAsset. Note this is a
- // "multi-frame" ResourceProvider, so the caller is capable of supporting
- // animations where the image assets do/don't change between frames.
- //
- // Not thread-safe. All public methods must be called from the sequence that
- // SkottieMRUResourceProvider is constructed on.
- class CC_PAINT_EXPORT SkottieMRUResourceProvider
- : public skresources::ResourceProvider {
- public:
- using FrameDataCallback = SkottieWrapper::FrameDataCallback;
- SkottieMRUResourceProvider(FrameDataCallback frame_data_cb,
- base::StringPiece animation_json);
- SkottieMRUResourceProvider(const SkottieMRUResourceProvider&) = delete;
- SkottieMRUResourceProvider& operator=(const SkottieMRUResourceProvider&) =
- delete;
- ~SkottieMRUResourceProvider() override;
- // Contains the metadata for all currently known ImageAssets in the animation.
- const SkottieResourceMetadataMap& GetImageAssetMetadata() const;
- private:
- // skresources::ResourceProvider implementation:
- sk_sp<skresources::ImageAsset> loadImageAsset(
- const char resource_path[],
- const char resource_name[],
- const char resource_id[]) const override;
- const SkottieWrapper::FrameDataCallback frame_data_cb_;
- const base::flat_map</*asset_id*/ std::string, gfx::Size> image_asset_sizes_;
- // SkResources.h declares loadImageAsset() as a "const" method. Although the
- // method is logically const, these book-keeping members need to be updated in
- // that method. Hence, they're marked "mutable".
- mutable SkottieResourceMetadataMap image_asset_metadata_
- GUARDED_BY_CONTEXT(sequence_checker_);
- SEQUENCE_CHECKER(sequence_checker_);
- };
- } // namespace cc
- #endif // CC_PAINT_SKOTTIE_MRU_RESOURCE_PROVIDER_H_
|