local_page_entities_metadata_provider.cc 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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 "components/optimization_guide/core/local_page_entities_metadata_provider.h"
  5. #include "components/optimization_guide/core/entity_metadata.h"
  6. namespace optimization_guide {
  7. namespace {
  8. // The amount of data to build up in memory before converting to a sorted on-
  9. // disk file.
  10. constexpr size_t kDatabaseWriteBufferSizeBytes = 128 * 1024;
  11. } // namespace
  12. LocalPageEntitiesMetadataProvider::LocalPageEntitiesMetadataProvider() =
  13. default;
  14. LocalPageEntitiesMetadataProvider::~LocalPageEntitiesMetadataProvider() =
  15. default;
  16. void LocalPageEntitiesMetadataProvider::Initialize(
  17. leveldb_proto::ProtoDatabaseProvider* database_provider,
  18. const base::FilePath& database_dir,
  19. scoped_refptr<base::SequencedTaskRunner> background_task_runner) {
  20. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  21. background_task_runner_ = std::move(background_task_runner);
  22. database_ = database_provider->GetDB<proto::EntityMetadataStorage>(
  23. leveldb_proto::ProtoDbType::PAGE_ENTITY_METADATA_STORE, database_dir,
  24. background_task_runner_);
  25. leveldb_env::Options options = leveldb_proto::CreateSimpleOptions();
  26. options.write_buffer_size = kDatabaseWriteBufferSizeBytes;
  27. database_->Init(
  28. options,
  29. base::BindOnce(&LocalPageEntitiesMetadataProvider::OnDatabaseInitialized,
  30. weak_ptr_factory_.GetWeakPtr()));
  31. }
  32. void LocalPageEntitiesMetadataProvider::InitializeForTesting(
  33. std::unique_ptr<leveldb_proto::ProtoDatabase<proto::EntityMetadataStorage>>
  34. database,
  35. scoped_refptr<base::SequencedTaskRunner> background_task_runner) {
  36. database_ = std::move(database);
  37. background_task_runner_ = std::move(background_task_runner);
  38. }
  39. void LocalPageEntitiesMetadataProvider::OnDatabaseInitialized(
  40. leveldb_proto::Enums::InitStatus status) {
  41. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  42. if (status != leveldb_proto::Enums::InitStatus::kOK) {
  43. database_.reset();
  44. return;
  45. }
  46. }
  47. void LocalPageEntitiesMetadataProvider::GetMetadataForEntityId(
  48. const std::string& entity_id,
  49. EntityMetadataRetrievedCallback callback) {
  50. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  51. if (!database_) {
  52. std::move(callback).Run(absl::nullopt);
  53. return;
  54. }
  55. database_->GetEntry(
  56. entity_id, base::BindOnce(&LocalPageEntitiesMetadataProvider::OnGotEntry,
  57. weak_ptr_factory_.GetWeakPtr(), entity_id,
  58. std::move(callback)));
  59. }
  60. void LocalPageEntitiesMetadataProvider::OnGotEntry(
  61. const std::string& entity_id,
  62. EntityMetadataRetrievedCallback callback,
  63. bool success,
  64. std::unique_ptr<proto::EntityMetadataStorage> entry) {
  65. if (!success || !entry) {
  66. std::move(callback).Run(absl::nullopt);
  67. return;
  68. }
  69. EntityMetadata md;
  70. md.entity_id = entity_id;
  71. md.human_readable_name = entry->entity_name();
  72. std::move(callback).Run(md);
  73. }
  74. } // namespace optimization_guide