skottie_resource_metadata.cc 2.5 KB

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