model_info.cc 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // Copyright 2020 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 "components/optimization_guide/core/model_info.h"
  5. #include "base/memory/ptr_util.h"
  6. #include "base/notreached.h"
  7. #include "base/strings/utf_string_conversions.h"
  8. #include "build/build_config.h"
  9. #include "components/optimization_guide/core/model_util.h"
  10. namespace optimization_guide {
  11. ModelInfo::ModelInfo(const base::FilePath& model_file_path,
  12. const base::flat_set<base::FilePath>& additional_files,
  13. const int64_t version,
  14. const absl::optional<proto::Any>& model_metadata)
  15. : model_file_path_(model_file_path),
  16. additional_files_(additional_files),
  17. version_(version),
  18. model_metadata_(model_metadata) {}
  19. ModelInfo::~ModelInfo() = default;
  20. ModelInfo::ModelInfo(const ModelInfo&) = default;
  21. // static
  22. std::unique_ptr<ModelInfo> ModelInfo::Create(
  23. const proto::PredictionModel& model) {
  24. absl::optional<base::FilePath> model_file_path =
  25. StringToFilePath(model.model().download_url());
  26. if (!model_file_path)
  27. return nullptr;
  28. if (!model.model_info().has_version())
  29. return nullptr;
  30. base::flat_set<base::FilePath> additional_files;
  31. for (const proto::AdditionalModelFile& additional_file :
  32. model.model_info().additional_files()) {
  33. absl::optional<base::FilePath> additional_file_path =
  34. StringToFilePath(additional_file.file_path());
  35. if (!additional_file_path) {
  36. continue;
  37. }
  38. if (!additional_file_path->IsAbsolute()) {
  39. NOTREACHED() << FilePathToString(*additional_file_path);
  40. continue;
  41. }
  42. additional_files.insert(*additional_file_path);
  43. }
  44. absl::optional<proto::Any> model_metadata;
  45. if (model.model_info().has_model_metadata())
  46. model_metadata = model.model_info().model_metadata();
  47. // Private ctor, so we can't use std::make_unique.
  48. return base::WrapUnique(new ModelInfo(*model_file_path, additional_files,
  49. model.model_info().version(),
  50. model_metadata));
  51. }
  52. base::FilePath ModelInfo::GetModelFilePath() const {
  53. return model_file_path_;
  54. }
  55. base::flat_set<base::FilePath> ModelInfo::GetAdditionalFiles() const {
  56. return additional_files_;
  57. }
  58. int64_t ModelInfo::GetVersion() const {
  59. return version_;
  60. }
  61. absl::optional<proto::Any> ModelInfo::GetModelMetadata() const {
  62. return model_metadata_;
  63. }
  64. } // namespace optimization_guide