#ifndef ASH_HUD_DISPLAY_ASH_TRACING_HANDLER_H_
#define ASH_HUD_DISPLAY_ASH_TRACING_HANDLER_H_
#include <memory>
#include "ash/ash_export.h"
#include "base/files/platform_file.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/sequence_checker.h"
#include "base/trace_event/trace_config.h"
namespace perfetto {
class TracingSession;
}
namespace ash {
namespace hud_display {
class AshTracingRequest;
class ASH_EXPORT AshTracingHandler {
public:
AshTracingHandler();
AshTracingHandler(const AshTracingHandler&) = delete;
AshTracingHandler& operator=(const AshTracingHandler&) = delete;
~AshTracingHandler();
void Start(AshTracingRequest* request);
void Stop();
bool IsStarted() const;
static void SetPerfettoTracingSessionCreatorForTesting(
std::unique_ptr<perfetto::TracingSession> (*creator)(void));
static void ResetPerfettoTracingSessionCreatorForTesting();
private:
void OnTracingStarted();
void OnTracingFinished();
raw_ptr<AshTracingRequest, ExperimentalAsh> request_ = nullptr;
std::unique_ptr<perfetto::TracingSession> tracing_session_;
SEQUENCE_CHECKER(my_sequence_checker_);
base::WeakPtrFactory<AshTracingHandler> weak_factory_{this};
};
}
}
#endif