blob: c9e14148480dcdfb96992463d913f5c159676cc9 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/performance_manager/performance_manager_lock_observer.h"
#include "components/performance_manager/graph/frame_node_impl.h"
#include "components/performance_manager/performance_manager_impl.h"
#include "content/public/browser/lock_observer.h"
namespace performance_manager {
namespace {
void SetIsHoldingWebLock(int render_process_id,
int render_frame_id,
bool is_holding_web_lock,
GraphImpl* graph) {
FrameNodeImpl* frame_node =
graph->GetFrameNodeById(render_process_id, render_frame_id);
if (frame_node)
frame_node->SetIsHoldingWebLock(is_holding_web_lock);
}
void SetIsHoldingIndexedDBConnections(int render_process_id,
int render_frame_id,
bool is_holding_indexed_db_connection,
GraphImpl* graph) {
FrameNodeImpl* frame_node =
graph->GetFrameNodeById(render_process_id, render_frame_id);
// TODO(https://crbug.com/980533): Rename
// FrameNodeImpl::SetIsHoldingIndexedDBLock() to
// SetIsHoldingIndexedDBConnections().
if (frame_node)
frame_node->SetIsHoldingIndexedDBLock(is_holding_indexed_db_connection);
}
} // namespace
PerformanceManagerLockObserver::PerformanceManagerLockObserver() = default;
PerformanceManagerLockObserver::~PerformanceManagerLockObserver() {
// TODO(https://crbug.com/1013760): DCHECK that this happens after ThreadPool
// shutdown.
}
void PerformanceManagerLockObserver::OnFrameStartsHoldingWebLocks(
int render_process_id,
int render_frame_id) {
PerformanceManagerImpl::CallOnGraphImpl(
FROM_HERE, base::BindOnce(&SetIsHoldingWebLock, render_process_id,
render_frame_id, true));
}
void PerformanceManagerLockObserver::OnFrameStopsHoldingWebLocks(
int render_process_id,
int render_frame_id) {
PerformanceManagerImpl::CallOnGraphImpl(
FROM_HERE, base::BindOnce(&SetIsHoldingWebLock, render_process_id,
render_frame_id, false));
}
void PerformanceManagerLockObserver::OnFrameStartsHoldingIndexedDBConnections(
int render_process_id,
int render_frame_id) {
PerformanceManagerImpl::CallOnGraphImpl(
FROM_HERE, base::BindOnce(&SetIsHoldingIndexedDBConnections,
render_process_id, render_frame_id, true));
}
void PerformanceManagerLockObserver::OnFrameStopsHoldingIndexedDBConnections(
int render_process_id,
int render_frame_id) {
PerformanceManagerImpl::CallOnGraphImpl(
FROM_HERE, base::BindOnce(&SetIsHoldingIndexedDBConnections,
render_process_id, render_frame_id, false));
}
} // namespace performance_manager