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)