[M108 Migration][Loading Performance] Introduce |BeginMainFrame| throttling
[platform/framework/web/chromium-efl.git] / cc / paint / skottie_resource_metadata.cc
1 // Copyright 2021 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "cc/paint/skottie_resource_metadata.h"
6
7 #include <utility>
8
9 #include "base/check.h"
10 #include "base/hash/hash.h"
11 #include "base/logging.h"
12 #include "base/strings/utf_string_conversions.h"
13
14 namespace cc {
15
16 SkottieResourceMetadataMap::ImageAssetMetadata::ImageAssetMetadata(
17     base::FilePath resource_path_in,
18     absl::optional<gfx::Size> size_in)
19     : resource_path(std::move(resource_path_in)), size(std::move(size_in)) {}
20
21 SkottieResourceMetadataMap::SkottieResourceMetadataMap() = default;
22
23 SkottieResourceMetadataMap::SkottieResourceMetadataMap(
24     const SkottieResourceMetadataMap&) = default;
25
26 SkottieResourceMetadataMap& SkottieResourceMetadataMap::operator=(
27     const SkottieResourceMetadataMap&) = default;
28
29 SkottieResourceMetadataMap::~SkottieResourceMetadataMap() = default;
30
31 bool SkottieResourceMetadataMap::RegisterAsset(base::StringPiece resource_path,
32                                                base::StringPiece resource_name,
33                                                base::StringPiece resource_id,
34                                                absl::optional<gfx::Size> size) {
35   DCHECK(!size || !size->IsEmpty());
36   if (resource_id.empty()) {
37     LOG(ERROR) << "Skottie animation has asset with empty resource_id";
38     return false;
39   }
40
41   base::FilePath resource_name_component =
42       base::FilePath::FromASCII(resource_name);
43   if (resource_name_component.IsAbsolute()) {
44     // If the path is absolute, base::FilePath::Append() will fail anyways,
45     // likely with a fatal error.
46     LOG(ERROR) << "Skottie animation specifies an absolute resource_name path: "
47                << resource_name << ". Must be relative.";
48     return false;
49   }
50
51   bool inserted = asset_storage_
52                       .try_emplace(std::string(resource_id),
53                                    base::FilePath::FromASCII(resource_path)
54                                        .Append(resource_name_component),
55                                    std::move(size))
56                       .second;
57   if (!inserted) {
58     LOG(ERROR) << "Skottie animation has assets with duplicate resource_id: "
59                << resource_id;
60   }
61   return inserted;
62 }
63
64 SkottieResourceIdHash HashSkottieResourceId(base::StringPiece resource_id) {
65   return SkottieResourceIdHash::FromUnsafeValue(
66       base::PersistentHash(resource_id.data(), resource_id.length()));
67 }
68
69 }  // namespace cc