xref: /aosp_15_r20/external/cronet/net/disk_cache/simple/post_operation_waiter.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2019 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 "net/disk_cache/simple/post_operation_waiter.h"
6 
7 #include "base/check_op.h"
8 #include "base/functional/bind.h"
9 #include "base/functional/callback.h"
10 #include "net/disk_cache/simple/simple_histogram_macros.h"
11 
12 namespace disk_cache {
13 
14 SimplePostOperationWaiterTable::SimplePostOperationWaiterTable() = default;
15 SimplePostOperationWaiterTable::~SimplePostOperationWaiterTable() = default;
16 
OnOperationStart(uint64_t entry_hash)17 void SimplePostOperationWaiterTable::OnOperationStart(uint64_t entry_hash) {
18   auto [_, inserted] = entries_pending_operation_.emplace(
19       entry_hash, std::vector<base::OnceClosure>());
20   CHECK(inserted);
21 }
22 
OnOperationComplete(uint64_t entry_hash)23 void SimplePostOperationWaiterTable::OnOperationComplete(uint64_t entry_hash) {
24   auto it = entries_pending_operation_.find(entry_hash);
25   CHECK(it != entries_pending_operation_.end());
26   std::vector<base::OnceClosure> to_handle_waiters;
27   to_handle_waiters.swap(it->second);
28   entries_pending_operation_.erase(it);
29 
30   for (base::OnceClosure& post_operation : to_handle_waiters) {
31     std::move(post_operation).Run();
32   }
33 }
34 
Find(uint64_t entry_hash)35 std::vector<base::OnceClosure>* SimplePostOperationWaiterTable::Find(
36     uint64_t entry_hash) {
37   auto doom_it = entries_pending_operation_.find(entry_hash);
38   if (doom_it != entries_pending_operation_.end()) {
39     return &doom_it->second;
40   } else {
41     return nullptr;
42   }
43 }
44 
45 }  // namespace disk_cache
46