blob: e1b11502ef1ebe366570145a5250a14f2783f636 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/disk_cache/simple/post_operation_waiter.h"
#include "base/check_op.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "net/disk_cache/simple/simple_histogram_macros.h"
namespace disk_cache {
SimplePostOperationWaiterTable::SimplePostOperationWaiterTable() = default;
SimplePostOperationWaiterTable::~SimplePostOperationWaiterTable() = default;
void SimplePostOperationWaiterTable::OnOperationStart(uint64_t entry_hash) {
auto [_, inserted] = entries_pending_operation_.insert(
std::make_pair(entry_hash, std::vector<base::OnceClosure>()));
CHECK(inserted);
}
void SimplePostOperationWaiterTable::OnOperationComplete(uint64_t entry_hash) {
auto it = entries_pending_operation_.find(entry_hash);
CHECK(it != entries_pending_operation_.end());
std::vector<base::OnceClosure> to_handle_waiters;
to_handle_waiters.swap(it->second);
entries_pending_operation_.erase(it);
for (base::OnceClosure& post_operation : to_handle_waiters) {
std::move(post_operation).Run();
}
}
std::vector<base::OnceClosure>* SimplePostOperationWaiterTable::Find(
uint64_t entry_hash) {
auto doom_it = entries_pending_operation_.find(entry_hash);
if (doom_it != entries_pending_operation_.end()) {
return &doom_it->second;
} else {
return nullptr;
}
}
} // namespace disk_cache