| // Copyright 2017 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 "extensions/renderer/async_scripts_run_info.h" | 
 |  | 
 | #include "base/metrics/histogram_macros.h" | 
 | #include "content/public/renderer/render_frame.h" | 
 | #include "extensions/renderer/scripts_run_info.h" | 
 |  | 
 | namespace extensions { | 
 |  | 
 | AsyncScriptsRunInfo::AsyncScriptsRunInfo(UserScript::RunLocation location) | 
 |     : run_location_(location) {} | 
 |  | 
 | AsyncScriptsRunInfo::~AsyncScriptsRunInfo() {} | 
 |  | 
 | void AsyncScriptsRunInfo::WillExecute(const base::TimeTicks& timestamp) { | 
 |   if (!last_completed_time_.is_null()) { | 
 |     switch (run_location_) { | 
 |       case UserScript::DOCUMENT_END: | 
 |         UMA_HISTOGRAM_TIMES( | 
 |             "Extensions.TimeYieldedBetweenContentScriptRuns.DocumentEnd", | 
 |             timestamp - last_completed_time_); | 
 |         break; | 
 |       case UserScript::DOCUMENT_IDLE: | 
 |         UMA_HISTOGRAM_TIMES( | 
 |             "Extensions.TimeYieldedBetweenContentScriptRuns.DocumentIdle", | 
 |             timestamp - last_completed_time_); | 
 |         break; | 
 |       // Currently document_start scripts are not async. | 
 |       default: | 
 |         break; | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | void AsyncScriptsRunInfo::OnCompleted(const base::TimeTicks& timestamp, | 
 |                                       base::Optional<base::TimeDelta> elapsed) { | 
 |   last_completed_time_ = timestamp; | 
 |   if (elapsed) { | 
 |     ScriptsRunInfo::LogLongInjectionTaskTime(run_location_, *elapsed); | 
 |   } | 
 | } | 
 |  | 
 | }  // namespace extensions |