blob: 10dc3ad3d9e75356976050ceafce690b7d4ab8a2 [file] [log] [blame]
// Copyright 2018 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 "content/browser/renderer_host/input/one_shot_timeout_monitor.h"
#include "base/trace_event/trace_event.h"
using base::TimeDelta;
using base::TimeTicks;
namespace content {
OneShotTimeoutMonitor::OneShotTimeoutMonitor(TimeoutHandler timeout_handler,
base::TimeDelta delay)
: timeout_handler_(std::move(timeout_handler)), delay_(delay) {
DCHECK(!timeout_handler_.is_null());
Start();
}
OneShotTimeoutMonitor::~OneShotTimeoutMonitor() {
if (timeout_timer_.IsRunning())
timeout_timer_.Stop();
}
void OneShotTimeoutMonitor::Start() {
TRACE_EVENT_ASYNC_BEGIN0("renderer_host", "OneShotTimeoutMonitor", this);
TRACE_EVENT_INSTANT0("renderer_host", "OneShotTimeoutMonitor::Start",
TRACE_EVENT_SCOPE_THREAD);
timeout_timer_.Start(FROM_HERE, delay_, this,
&OneShotTimeoutMonitor::TimedOut);
}
void OneShotTimeoutMonitor::TimedOut() {
TRACE_EVENT_ASYNC_END1("renderer_host", "OneShotTimeoutMonitor", this,
"result", "timed_out");
TRACE_EVENT0("renderer_host", "OneShotTimeoutMonitor::TimeOutHandler");
std::move(timeout_handler_).Run();
}
} // namespace content