15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_TEST_BASE_TRACING_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_TEST_BASE_TRACING_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/time/time.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace tracing {
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Called from UI thread.
16bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// Begin tracing specified category_patterns on the browser.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |category_patterns| is a comma-delimited list of category wildcards.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A category pattern can have an optional '-' prefix to make  categories with
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// matching categorys excluded. Either all category_patterns must be included
20b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// or all must be excluded.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Example: BeginTracing("test_MyTest*");
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Example: BeginTracing("test_MyTest*,test_OtherStuff");
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Example: BeginTracing("-excluded_category1,-excluded_category2");
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// See base/debug/trace_event.h for documentation of included and excluded
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// category_patterns.
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool BeginTracing(const std::string& category_patterns) WARN_UNUSED_RESULT;
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Called from UI thread.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Specify a watch event in order to use the WaitForWatchEvent function.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// After |num_occurrences| of the given event have been seen on a particular
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// process, WaitForWatchEvent will return.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BeginTracingWithWatch(const std::string& category_patterns,
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           const std::string& category_name,
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           const std::string& event_name,
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           int num_occurrences) WARN_UNUSED_RESULT;
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Called from UI thread.
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Wait on the event set with BeginTracingWithWatch. If non-zero, return after
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// |timeout| regardless of watch event notification. Returns true if watch event
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// occurred, false if it timed out.
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbool WaitForWatchEvent(base::TimeDelta timeout) WARN_UNUSED_RESULT;
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Called from UI thread.
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// End trace and collect the trace output as a json string.
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbool EndTracing(std::string* json_trace_output) WARN_UNUSED_RESULT;
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}  // namespace tracing
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_TEST_BASE_TRACING_H_
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)