Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(907)

Unified Diff: base/debug/trace_event_win_unittest.cc

Issue 885443002: Roll Chrome into Mojo. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Rebase to ToT mojo Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/debug/trace_event_win.cc ('k') | base/memory/discardable_memory_shmem_allocator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/debug/trace_event_win_unittest.cc
diff --git a/base/debug/trace_event_win_unittest.cc b/base/debug/trace_event_win_unittest.cc
deleted file mode 100644
index 378264511a2c1525ba7ec56024c6b2751c3924a5..0000000000000000000000000000000000000000
--- a/base/debug/trace_event_win_unittest.cc
+++ /dev/null
@@ -1,319 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/debug/trace_event.h"
-
-#include <strstream>
-
-#include "base/at_exit.h"
-#include "base/basictypes.h"
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_win.h"
-#include "base/files/file_util.h"
-#include "base/win/event_trace_consumer.h"
-#include "base/win/event_trace_controller.h"
-#include "base/win/event_trace_provider.h"
-#include "base/win/windows_version.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include <initguid.h> // NOLINT - must be last include.
-
-namespace base {
-namespace debug {
-
-namespace {
-
-using testing::_;
-using testing::AnyNumber;
-using testing::InSequence;
-using testing::Ge;
-using testing::Le;
-using testing::NotNull;
-
-using base::win::EtwEventType;
-using base::win::EtwTraceConsumerBase;
-using base::win::EtwTraceController;
-using base::win::EtwTraceProperties;
-
-// Data for unittests traces.
-const char kEmpty[] = "";
-const char kName[] = "unittest.trace_name";
-const char kExtra[] = "UnittestDummyExtraString";
-const void* kId = kName;
-
-const wchar_t kTestSessionName[] = L"TraceEvent unittest session";
-
-MATCHER_P(BufferStartsWith, str, "Buffer starts with") {
- return memcmp(arg, str.c_str(), str.length()) == 0;
-}
-
-// Duplicated from <evntrace.h> to fix link problems.
-DEFINE_GUID( /* 68fdd900-4a3e-11d1-84f4-0000f80464e3 */
- kEventTraceGuid,
- 0x68fdd900,
- 0x4a3e,
- 0x11d1,
- 0x84, 0xf4, 0x00, 0x00, 0xf8, 0x04, 0x64, 0xe3);
-
-class TestEventConsumer: public EtwTraceConsumerBase<TestEventConsumer> {
- public:
- TestEventConsumer() {
- EXPECT_TRUE(current_ == NULL);
- current_ = this;
- }
-
- ~TestEventConsumer() {
- EXPECT_TRUE(current_ == this);
- current_ = NULL;
- }
-
- MOCK_METHOD4(Event, void(REFGUID event_class,
- EtwEventType event_type,
- size_t buf_len,
- const void* buf));
-
- static void ProcessEvent(EVENT_TRACE* event) {
- ASSERT_TRUE(current_ != NULL);
- current_->Event(event->Header.Guid,
- event->Header.Class.Type,
- event->MofLength,
- event->MofData);
- }
-
- private:
- static TestEventConsumer* current_;
-};
-
-TestEventConsumer* TestEventConsumer::current_ = NULL;
-
-class TraceEventWinTest: public testing::Test {
- public:
- TraceEventWinTest() {
- }
-
- void SetUp() {
- bool is_xp = win::GetVersion() < base::win::VERSION_VISTA;
-
- if (is_xp) {
- // Tear down any dangling session from an earlier failing test.
- EtwTraceProperties ignore;
- EtwTraceController::Stop(kTestSessionName, &ignore);
- }
-
- // Resurrect and initialize the TraceLog singleton instance.
- // On Vista and better, we need the provider registered before we
- // start the private, in-proc session, but on XP we need the global
- // session created and the provider enabled before we register our
- // provider.
- TraceEventETWProvider* tracelog = NULL;
- if (!is_xp) {
- TraceEventETWProvider::Resurrect();
- tracelog = TraceEventETWProvider::GetInstance();
- ASSERT_TRUE(tracelog != NULL);
- ASSERT_FALSE(tracelog->IsTracing());
- }
-
- // Create the log file.
- ASSERT_TRUE(base::CreateTemporaryFile(&log_file_));
-
- // Create a private log session on the file.
- EtwTraceProperties prop;
- ASSERT_HRESULT_SUCCEEDED(prop.SetLoggerFileName(log_file_.value().c_str()));
- EVENT_TRACE_PROPERTIES& p = *prop.get();
- p.Wnode.ClientContext = 1; // QPC timer accuracy.
- p.LogFileMode = EVENT_TRACE_FILE_MODE_SEQUENTIAL; // Sequential log.
-
- // On Vista and later, we create a private in-process log session, because
- // otherwise we'd need administrator privileges. Unfortunately we can't
- // do the same on XP and better, because the semantics of a private
- // logger session are different, and the IN_PROC flag is not supported.
- if (!is_xp) {
- p.LogFileMode |= EVENT_TRACE_PRIVATE_IN_PROC | // In-proc for non-admin.
- EVENT_TRACE_PRIVATE_LOGGER_MODE; // Process-private log.
- }
-
- p.MaximumFileSize = 100; // 100M file size.
- p.FlushTimer = 1; // 1 second flush lag.
- ASSERT_HRESULT_SUCCEEDED(controller_.Start(kTestSessionName, &prop));
-
- // Enable the TraceLog provider GUID.
- ASSERT_HRESULT_SUCCEEDED(
- controller_.EnableProvider(kChromeTraceProviderName,
- TRACE_LEVEL_INFORMATION,
- 0));
-
- if (is_xp) {
- TraceEventETWProvider::Resurrect();
- tracelog = TraceEventETWProvider::GetInstance();
- }
- ASSERT_TRUE(tracelog != NULL);
- EXPECT_TRUE(tracelog->IsTracing());
- }
-
- void TearDown() {
- EtwTraceProperties prop;
- if (controller_.session() != 0)
- EXPECT_HRESULT_SUCCEEDED(controller_.Stop(&prop));
-
- if (!log_file_.value().empty())
- base::DeleteFile(log_file_, false);
-
- // We want our singleton torn down after each test.
- TraceLog::DeleteForTesting();
- }
-
- void ExpectEvent(REFGUID guid,
- EtwEventType type,
- const char* name,
- size_t name_len,
- const void* id,
- const char* extra,
- size_t extra_len) {
- // Build the trace event buffer we expect will result from this.
- std::stringbuf str;
- str.sputn(name, name_len + 1);
- str.sputn(reinterpret_cast<const char*>(&id), sizeof(id));
- str.sputn(extra, extra_len + 1);
-
- // And set up the expectation for the event callback.
- EXPECT_CALL(consumer_, Event(guid,
- type,
- testing::Ge(str.str().length()),
- BufferStartsWith(str.str())));
- }
-
- void ExpectPlayLog() {
- // Ignore EventTraceGuid events.
- EXPECT_CALL(consumer_, Event(kEventTraceGuid, _, _, _))
- .Times(AnyNumber());
- }
-
- void PlayLog() {
- EtwTraceProperties prop;
- EXPECT_HRESULT_SUCCEEDED(controller_.Flush(&prop));
- EXPECT_HRESULT_SUCCEEDED(controller_.Stop(&prop));
- ASSERT_HRESULT_SUCCEEDED(
- consumer_.OpenFileSession(log_file_.value().c_str()));
-
- ASSERT_HRESULT_SUCCEEDED(consumer_.Consume());
- }
-
- private:
- // We want our singleton torn down after each test.
- ShadowingAtExitManager at_exit_manager_;
- EtwTraceController controller_;
- FilePath log_file_;
- TestEventConsumer consumer_;
-};
-
-} // namespace
-
-
-TEST_F(TraceEventWinTest, TraceLog) {
- ExpectPlayLog();
-
- // The events should arrive in the same sequence as the expects.
- InSequence in_sequence;
-
- // Full argument version, passing lengths explicitly.
- TraceEventETWProvider::Trace(kName,
- strlen(kName),
- TRACE_EVENT_PHASE_BEGIN,
- kId,
- kExtra,
- strlen(kExtra));
-
- ExpectEvent(kTraceEventClass32,
- kTraceEventTypeBegin,
- kName, strlen(kName),
- kId,
- kExtra, strlen(kExtra));
-
- // Const char* version.
- TraceEventETWProvider::Trace(static_cast<const char*>(kName),
- TRACE_EVENT_PHASE_END,
- kId,
- static_cast<const char*>(kExtra));
-
- ExpectEvent(kTraceEventClass32,
- kTraceEventTypeEnd,
- kName, strlen(kName),
- kId,
- kExtra, strlen(kExtra));
-
- // std::string extra version.
- TraceEventETWProvider::Trace(static_cast<const char*>(kName),
- TRACE_EVENT_PHASE_INSTANT,
- kId,
- std::string(kExtra));
-
- ExpectEvent(kTraceEventClass32,
- kTraceEventTypeInstant,
- kName, strlen(kName),
- kId,
- kExtra, strlen(kExtra));
-
-
- // Test for sanity on NULL inputs.
- TraceEventETWProvider::Trace(NULL,
- 0,
- TRACE_EVENT_PHASE_BEGIN,
- kId,
- NULL,
- 0);
-
- ExpectEvent(kTraceEventClass32,
- kTraceEventTypeBegin,
- kEmpty, 0,
- kId,
- kEmpty, 0);
-
- TraceEventETWProvider::Trace(NULL,
- TraceEventETWProvider::kUseStrlen,
- TRACE_EVENT_PHASE_END,
- kId,
- NULL,
- TraceEventETWProvider::kUseStrlen);
-
- ExpectEvent(kTraceEventClass32,
- kTraceEventTypeEnd,
- kEmpty, 0,
- kId,
- kEmpty, 0);
-
- PlayLog();
-}
-
-TEST_F(TraceEventWinTest, Macros) {
- ExpectPlayLog();
-
- // The events should arrive in the same sequence as the expects.
- InSequence in_sequence;
-
- TRACE_EVENT_BEGIN_ETW(kName, kId, kExtra);
- ExpectEvent(kTraceEventClass32,
- kTraceEventTypeBegin,
- kName, strlen(kName),
- kId,
- kExtra, strlen(kExtra));
-
- TRACE_EVENT_END_ETW(kName, kId, kExtra);
- ExpectEvent(kTraceEventClass32,
- kTraceEventTypeEnd,
- kName, strlen(kName),
- kId,
- kExtra, strlen(kExtra));
-
- TRACE_EVENT_INSTANT_ETW(kName, kId, kExtra);
- ExpectEvent(kTraceEventClass32,
- kTraceEventTypeInstant,
- kName, strlen(kName),
- kId,
- kExtra, strlen(kExtra));
-
- PlayLog();
-}
-
-} // namespace debug
-} // namespace base
« no previous file with comments | « base/debug/trace_event_win.cc ('k') | base/memory/discardable_memory_shmem_allocator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698