1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/tests/test_trace_event.h" 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/module.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/tests/testing_instance.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochREGISTER_TEST_CASE(TraceEvent); 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTestTraceEvent::TestTraceEvent(TestingInstance* instance) 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : TestCase(instance), 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch interface_(NULL) { 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool TestTraceEvent::Init() { 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch interface_ = static_cast<const PPB_Trace_Event_Dev*>( 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch pp::Module::Get()->GetBrowserInterface(PPB_TRACE_EVENT_DEV_INTERFACE)); 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return !!interface_; 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TestTraceEvent::RunTests(const std::string& filter) { 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RUN_TEST(Smoke, filter); 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RUN_TEST(SmokeWithTimestamps, filter); 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RUN_TEST(Clock, filter); 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstd::string TestTraceEvent::TestSmoke() { 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // This test does not verify the log message actually reaches dev tracing, but 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // it does test that the interface exists and that it can be called without 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // crashing. 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const void* cat_enabled = interface_->GetCategoryEnabled("bar"); 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch interface_->AddTraceEvent('B', cat_enabled, "foo", 0, 0, NULL, NULL, NULL, 0); 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch interface_->AddTraceEvent('E', cat_enabled, "foo", 0, 0, NULL, NULL, NULL, 0); 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PASS(); 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstd::string TestTraceEvent::TestSmokeWithTimestamps() { 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // This test does not verify the log message actually reaches dev tracing, but 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // it does test that the interface exists and that it can be called without 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // crashing. 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const void* cat_enabled = interface_->GetCategoryEnabled("bar"); 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch interface_->AddTraceEventWithThreadIdAndTimestamp( 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 'B', cat_enabled, "foo", 0, 0, 42, 0, NULL, NULL, NULL, 0); 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch interface_->AddTraceEventWithThreadIdAndTimestamp( 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 'B', cat_enabled, "foo", 0, 1, 43, 0, NULL, NULL, NULL, 0); 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch interface_->AddTraceEventWithThreadIdAndTimestamp( 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 'E', cat_enabled, "foo", 0, 0, 44, 0, NULL, NULL, NULL, 0); 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch interface_->AddTraceEventWithThreadIdAndTimestamp( 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 'E', cat_enabled, "foo", 0, 1, 45, 0, NULL, NULL, NULL, 0); 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PASS(); 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstd::string TestTraceEvent::TestClock() { 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64_t last = interface_->Now(); 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for(int i=0; i<5; ++i){ 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64_t next = interface_->Now(); 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_LE(last, next); 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch last = next; 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PASS(); 65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 66