17242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
27242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Use of this source code is governed by a BSD-style license that can be
37242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// found in the LICENSE file.
47242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
57242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#ifndef TracedTask_h
67242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#define TracedTask_h
77242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
87242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "platform/Task.h"
97242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "platform/TraceEvent.h"
107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "platform/TraceLocation.h"
117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccinamespace blink {
137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#ifdef MANGLE_COMPILES_ON_WIN_OK
157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// TODO: Once win version compiles correctly when using TRACE_ID_MANGLE remove
167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// the ifdef to always mangle
177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#define MANGLE(id) TRACE_ID_MANGLE(id)
187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#else
197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#define MANGLE(id) (id)
207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif
217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass TracedTask {
237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccipublic:
247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    typedef Function<void()> Task;
257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void run() const;
277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciprivate:
297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    friend class Scheduler;
307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    TracedTask(const Task&, const TraceLocation&, const char* traceName);
317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    // Declared volatile as it is atomically incremented.
337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    static volatile int s_nextFlowTraceID;
347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    uint64_t m_flowTraceID;
367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Task m_task;
377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    TraceLocation m_location;
387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    const char* m_traceName;
397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci};
407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink
427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif // TracedTask_h
44