#ifndef EXTENSIONS_BROWSER_API_WEB_REQUEST_WEB_REQUEST_TIME_TRACKER_H_
#define EXTENSIONS_BROWSER_API_WEB_REQUEST_WEB_REQUEST_TIME_TRACKER_H_
#include <stdint.h>
#include <map>
#include "base/gtest_prod_util.h"
#include "base/time/time.h"
#include "extensions/buildflags/buildflags.h"
static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE));
class ExtensionWebRequestTimeTracker {
public:
ExtensionWebRequestTimeTracker();
ExtensionWebRequestTimeTracker(const ExtensionWebRequestTimeTracker&) =
delete;
ExtensionWebRequestTimeTracker& operator=(
const ExtensionWebRequestTimeTracker&) = delete;
~ExtensionWebRequestTimeTracker();
void LogRequestStartTime(int64_t request_id,
const base::TimeTicks& start_time,
bool has_listener,
bool has_extra_headers_listener);
void LogBeforeRequestDispatchTime(int64_t request_id,
base::TimeTicks dispatch_time);
void LogBeforeRequestCompletionTime(int64_t request_id,
base::TimeTicks completion_time);
void LogBeforeRequestDNRStartTime(int64_t request_id,
base::TimeTicks start_time);
void LogBeforeRequestDNRCompletionTime(int64_t request_id,
base::TimeTicks completion_time);
void LogRequestEndTime(int64_t request_id, const base::TimeTicks& end_time);
void IncrementTotalBlockTime(int64_t request_id,
const base::TimeDelta& block_time);
void SetRequestCanceled(int64_t request_id);
void SetRequestRedirected(int64_t request_id);
private:
FRIEND_TEST_ALL_PREFIXES(ExtensionWebRequestTimeTrackerTest, Histograms);
struct RequestTimeLog {
base::TimeTicks request_start_time;
base::TimeTicks before_request_listener_dispatch_time;
base::TimeTicks before_request_dnr_start_time;
base::TimeTicks before_request_dnr_completion_time;
base::TimeTicks before_request_listener_completion_time;
base::TimeDelta block_duration;
bool has_listener = false;
bool has_extra_headers_listener = false;
RequestTimeLog();
RequestTimeLog(const RequestTimeLog&) = delete;
RequestTimeLog& operator=(const RequestTimeLog&) = delete;
~RequestTimeLog();
};
void AnalyzeLogRequest(const RequestTimeLog& log,
const base::TimeTicks& end_time);
std::map<int64_t, RequestTimeLog> request_time_logs_;
};
#endif