blob: d535b3e6f0a418cb3fece43be862739e374d7f00 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ASH_ARC_TRACING_UMA_PERF_REPORTING_H_
#define CHROME_BROWSER_ASH_ARC_TRACING_UMA_PERF_REPORTING_H_
#include <optional>
#include <set>
#include <string>
#include <string_view>
#include "base/memory/weak_ptr.h"
#include "chrome/browser/ash/arc/tracing/arc_app_performance_tracing_session.h"
namespace arc {
// Defines the delay to start tracing after ARC++ window gets activated.
// This is done to avoid likely redundant statistics collection during the app
// initialization/loading time.
inline constexpr base::TimeDelta kInitTracingDelay = base::Minutes(1);
// Defines the delay to start next session of capturing statistics for the same
// active app or in case the app was already reported.
inline constexpr base::TimeDelta kNextTracingDelay = base::Minutes(20);
// Schedules and reports UMA performance measurements.
class UmaPerfReporting {
public:
UmaPerfReporting();
~UmaPerfReporting();
void Schedule(ArcAppPerformanceTracingSession* session,
const std::string& category);
static void SetTracingPeriodForTesting(const base::TimeDelta& period);
private:
void OnDone(ArcAppPerformanceTracingSession* session,
const std::string& category,
const std::optional<PerfTraceResult>& result);
// Set of already reported ARC++ apps for the current session. Used to prevent
// capturing too frequently.
std::set<std::string> reported_categories_;
base::WeakPtrFactory<UmaPerfReporting> weak_ptr_factory_;
};
} // namespace arc
#endif // CHROME_BROWSER_ASH_ARC_TRACING_UMA_PERF_REPORTING_H_