Make Windows build work Various warning fixes, and deletions of unused stuff. Change-Id: I0682b450b5fca0de7c1d1763e1e011c258669015 Reviewed-on: https://gn-review.googlesource.com/1380 Reviewed-by: Brett Wilson <brettw@chromium.org>
diff --git a/README.md b/README.md index 486b14d..498b017 100644 --- a/README.md +++ b/README.md
@@ -7,5 +7,5 @@ git clone https://gn.googlesource.com/gn cd gn - build/gen.py + python build/gen.py ninja -C out
diff --git a/base/metrics/field_trial.cc b/base/metrics/field_trial.cc index ed4f147..25f21ca 100644 --- a/base/metrics/field_trial.cc +++ b/base/metrics/field_trial.cc
@@ -1229,7 +1229,8 @@ #if defined(OS_FUCHSIA) zx_handle_t handle = static_cast<zx_handle_t>(field_trial_handle); #elif defined(OS_WIN) - HANDLE handle = reinterpret_cast<HANDLE>(field_trial_handle); + HANDLE handle = + reinterpret_cast<HANDLE>(static_cast<uintptr_t>(field_trial_handle)); if (base::IsCurrentProcessElevated()) { // base::LaunchElevatedProcess doesn't have a way to duplicate the handle, // but this process can since by definition it's not sandboxed.
diff --git a/base/task_scheduler/scheduler_worker_pool_impl.cc b/base/task_scheduler/scheduler_worker_pool_impl.cc index b309bbd..0e0c107 100644 --- a/base/task_scheduler/scheduler_worker_pool_impl.cc +++ b/base/task_scheduler/scheduler_worker_pool_impl.cc
@@ -31,7 +31,6 @@ #if defined(OS_WIN) #include "base/win/scoped_com_initializer.h" #include "base/win/scoped_windows_thread_environment.h" -#include "base/win/scoped_winrt_initializer.h" #include "base/win/windows_version.h" #endif // defined(OS_WIN) @@ -152,10 +151,6 @@ // returned a non-empty sequence and DidRunTask() hasn't been called yet). bool is_running_task_ = false; -#if defined(OS_WIN) - std::unique_ptr<win::ScopedWindowsThreadEnvironment> win_thread_environment_; -#endif // defined(OS_WIN) - // Verifies that specific calls are always made from the worker thread. THREAD_CHECKER(worker_thread_checker_); @@ -405,18 +400,6 @@ #endif } -#if defined(OS_WIN) - if (outer_->worker_environment_ == WorkerEnvironment::COM_MTA) { - if (win::GetVersion() >= win::VERSION_WIN8) { - win_thread_environment_ = std::make_unique<win::ScopedWinrtInitializer>(); - } else { - win_thread_environment_ = std::make_unique<win::ScopedCOMInitializer>( - win::ScopedCOMInitializer::kMTA); - } - DCHECK(win_thread_environment_->Succeeded()); - } -#endif // defined(OS_WIN) - DCHECK_EQ(num_tasks_since_last_wait_, 0U); PlatformThread::SetName( @@ -588,10 +571,6 @@ } } #endif - -#if defined(OS_WIN) - win_thread_environment_.reset(); -#endif // defined(OS_WIN) } void SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::
diff --git a/base/task_scheduler/task_tracker.cc b/base/task_scheduler/task_tracker.cc index ab46b9e..5c98b5c 100644 --- a/base/task_scheduler/task_tracker.cc +++ b/base/task_scheduler/task_tracker.cc
@@ -454,15 +454,6 @@ DCHECK(latency_histogram_type == LatencyHistogramType::TASK_LATENCY || latency_histogram_type == LatencyHistogramType::HEARTBEAT_LATENCY); - auto& histograms = - latency_histogram_type == LatencyHistogramType::TASK_LATENCY - ? task_latency_histograms_ - : heartbeat_latency_histograms_; - histograms[static_cast<int>(task_traits.priority())] - [task_traits.may_block() || task_traits.with_base_sync_primitives() - ? 1 - : 0] - ->AddTimeMicrosecondsGranularity(task_latency); } void TaskTracker::RunOrSkipTask(Task task,
diff --git a/base/trace_event/trace_event_etw_export_win.cc b/base/trace_event/trace_event_etw_export_win.cc deleted file mode 100644 index 993a222..0000000 --- a/base/trace_event/trace_event_etw_export_win.cc +++ /dev/null
@@ -1,380 +0,0 @@ -// Copyright 2015 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/trace_event/trace_event_etw_export_win.h" - -#include <stddef.h> - -#include "base/command_line.h" -#include "base/logging.h" -#include "base/memory/singleton.h" -#include "base/strings/string_tokenizer.h" -#include "base/strings/utf_string_conversions.h" -#include "base/threading/platform_thread.h" -#include "base/trace_event/trace_event.h" -#include "base/trace_event/trace_event_impl.h" - -#include <windows.h> - -// The GetProcAddress technique is borrowed from -// https://github.com/google/UIforETW/tree/master/ETWProviders -// -// EVNTAPI is used in evntprov.h which is included by chrome_events_win.h. -// We define EVNTAPI without the DECLSPEC_IMPORT specifier so that we can -// implement these functions locally instead of using the import library, and -// can therefore still run on Windows XP. -#define EVNTAPI __stdcall -// Include the event register/write/unregister macros compiled from the manifest -// file. Note that this includes evntprov.h which requires a Vista+ Windows SDK. -// -// In SHARED_INTERMEDIATE_DIR. -#include "base/trace_event/etw_manifest/chrome_events_win.h" // NOLINT - -namespace { -// |kFilteredEventGroupNames| contains the event categories that can be -// exported individually. These categories can be enabled by passing the correct -// keyword when starting the trace. A keyword is a 64-bit flag and we attribute -// one bit per category. We can therefore enable a particular category by -// setting its corresponding bit in the keyword. For events that are not present -// in |kFilteredEventGroupNames|, we have two bits that control their -// behaviour. When bit 61 is enabled, any event that is not disabled by default -// (ie. doesn't start with disabled-by-default-) will be exported. Likewise, -// when bit 62 is enabled, any event that is disabled by default will be -// exported. -// -// Note that bit 63 (MSB) must always be set, otherwise tracing will be disabled -// by ETW. Therefore, the keyword will always be greater than -// 0x8000000000000000. -// -// Examples of passing keywords to the provider using xperf: -// # This exports "benchmark" and "cc" events -// xperf -start chrome -on Chrome:0x8000000000000009 -// -// # This exports "gpu", "netlog" and all other events that are not disabled by -// # default -// xperf -start chrome -on Chrome:0xA0000000000000A0 -// -// More info about starting a trace and keyword can be obtained by using the -// help section of xperf (xperf -help start). Note that xperf documentation -// refers to keywords as flags and there are two ways to enable them, using -// group names or the hex representation. We only support the latter. Also, we -// ignore the level. -const char* const kFilteredEventGroupNames[] = { - "benchmark", // 0x1 - "blink", // 0x2 - "browser", // 0x4 - "cc", // 0x8 - "evdev", // 0x10 - "gpu", // 0x20 - "input", // 0x40 - "netlog", // 0x80 - "sequence_manager", // 0x100 - "toplevel", // 0x200 - "v8", // 0x400 - "disabled-by-default-cc.debug", // 0x800 - "disabled-by-default-cc.debug.picture", // 0x1000 - "disabled-by-default-toplevel.flow", // 0x2000 - "startup"}; // 0x4000 -const char kOtherEventsGroupName[] = "__OTHER_EVENTS"; // 0x2000000000000000 -const char kDisabledOtherEventsGroupName[] = - "__DISABLED_OTHER_EVENTS"; // 0x4000000000000000 -const uint64_t kOtherEventsKeywordBit = 1ULL << 61; -const uint64_t kDisabledOtherEventsKeywordBit = 1ULL << 62; -const size_t kNumberOfCategories = ARRAYSIZE(kFilteredEventGroupNames) + 2U; - -} // namespace - -namespace base { -namespace trace_event { - -// This object will be created by each process. It's a background (low-priority) -// thread that will monitor the ETW keyword for any changes. -class TraceEventETWExport::ETWKeywordUpdateThread - : public PlatformThread::Delegate { - public: - ETWKeywordUpdateThread() {} - ~ETWKeywordUpdateThread() override {} - - // Implementation of PlatformThread::Delegate: - void ThreadMain() override { - PlatformThread::SetName("ETW Keyword Update Thread"); - TimeDelta sleep_time = TimeDelta::FromMilliseconds(kUpdateTimerDelayMs); - while (1) { - PlatformThread::Sleep(sleep_time); - trace_event::TraceEventETWExport::UpdateETWKeyword(); - } - } - - private: - // Time between checks for ETW keyword changes (in milliseconds). - unsigned int kUpdateTimerDelayMs = 1000; -}; - - -TraceEventETWExport::TraceEventETWExport() - : etw_export_enabled_(false), etw_match_any_keyword_(0ULL) { - // Register the ETW provider. If registration fails then the event logging - // calls will fail. - EventRegisterChrome(); - - // Make sure to initialize the map with all the group names. Subsequent - // modifications will be made by the background thread and only affect the - // values of the keys (no key addition/deletion). Therefore, the map does not - // require a lock for access. - for (size_t i = 0; i < ARRAYSIZE(kFilteredEventGroupNames); i++) - categories_status_[kFilteredEventGroupNames[i]] = false; - categories_status_[kOtherEventsGroupName] = false; - categories_status_[kDisabledOtherEventsGroupName] = false; - DCHECK_EQ(kNumberOfCategories, categories_status_.size()); -} - -TraceEventETWExport::~TraceEventETWExport() { - EventUnregisterChrome(); -} - -// static -TraceEventETWExport* TraceEventETWExport::GetInstance() { - return Singleton<TraceEventETWExport, - StaticMemorySingletonTraits<TraceEventETWExport>>::get(); -} - -// static -void TraceEventETWExport::EnableETWExport() { - auto* instance = GetInstance(); - if (instance && !instance->etw_export_enabled_) { - instance->etw_export_enabled_ = true; - // Sync the enabled categories with ETW by calling UpdateEnabledCategories() - // that checks the keyword. Then create a thread that will call that same - // function periodically, to make sure we stay in sync. - instance->UpdateEnabledCategories(); - if (instance->keyword_update_thread_handle_.is_null()) { - instance->keyword_update_thread_.reset(new ETWKeywordUpdateThread); - PlatformThread::CreateWithPriority( - 0, instance->keyword_update_thread_.get(), - &instance->keyword_update_thread_handle_, ThreadPriority::BACKGROUND); - } - } -} - -// static -void TraceEventETWExport::DisableETWExport() { - auto* instance = GetInstance(); - if (instance && instance->etw_export_enabled_) - instance->etw_export_enabled_ = false; -} - -// static -bool TraceEventETWExport::IsETWExportEnabled() { - auto* instance = GetInstance(); - return (instance && instance->etw_export_enabled_); -} - -// static -void TraceEventETWExport::AddEvent( - char phase, - const unsigned char* category_group_enabled, - const char* name, - unsigned long long id, - int num_args, - const char* const* arg_names, - const unsigned char* arg_types, - const unsigned long long* arg_values, - const std::unique_ptr<ConvertableToTraceFormat>* convertable_values) { - // We bail early in case exporting is disabled or no consumer is listening. - auto* instance = GetInstance(); - if (!instance || !instance->etw_export_enabled_ || !EventEnabledChromeEvent()) - return; - - const char* phase_string = nullptr; - // Space to store the phase identifier and null-terminator, when needed. - char phase_buffer[2]; - switch (phase) { - case TRACE_EVENT_PHASE_BEGIN: - phase_string = "Begin"; - break; - case TRACE_EVENT_PHASE_END: - phase_string = "End"; - break; - case TRACE_EVENT_PHASE_COMPLETE: - phase_string = "Complete"; - break; - case TRACE_EVENT_PHASE_INSTANT: - phase_string = "Instant"; - break; - case TRACE_EVENT_PHASE_ASYNC_BEGIN: - phase_string = "Async Begin"; - break; - case TRACE_EVENT_PHASE_ASYNC_STEP_INTO: - phase_string = "Async Step Into"; - break; - case TRACE_EVENT_PHASE_ASYNC_STEP_PAST: - phase_string = "Async Step Past"; - break; - case TRACE_EVENT_PHASE_ASYNC_END: - phase_string = "Async End"; - break; - case TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN: - phase_string = "Nestable Async Begin"; - break; - case TRACE_EVENT_PHASE_NESTABLE_ASYNC_END: - phase_string = "Nestable Async End"; - break; - case TRACE_EVENT_PHASE_NESTABLE_ASYNC_INSTANT: - phase_string = "Nestable Async Instant"; - break; - case TRACE_EVENT_PHASE_FLOW_BEGIN: - phase_string = "Phase Flow Begin"; - break; - case TRACE_EVENT_PHASE_FLOW_STEP: - phase_string = "Phase Flow Step"; - break; - case TRACE_EVENT_PHASE_FLOW_END: - phase_string = "Phase Flow End"; - break; - case TRACE_EVENT_PHASE_METADATA: - phase_string = "Phase Metadata"; - break; - case TRACE_EVENT_PHASE_COUNTER: - phase_string = "Phase Counter"; - break; - case TRACE_EVENT_PHASE_SAMPLE: - phase_string = "Phase Sample"; - break; - case TRACE_EVENT_PHASE_CREATE_OBJECT: - phase_string = "Phase Create Object"; - break; - case TRACE_EVENT_PHASE_SNAPSHOT_OBJECT: - phase_string = "Phase Snapshot Object"; - break; - case TRACE_EVENT_PHASE_DELETE_OBJECT: - phase_string = "Phase Delete Object"; - break; - default: - phase_buffer[0] = phase; - phase_buffer[1] = 0; - phase_string = phase_buffer; - break; - } - - std::string arg_values_string[3]; - for (int i = 0; i < num_args; i++) { - if (arg_types[i] == TRACE_VALUE_TYPE_CONVERTABLE) { - // Temporarily do nothing here. This function consumes 1/3 to 1/2 of - // *total* process CPU time when ETW tracing, and many of the strings - // created exceed WPA's 4094 byte limit and are shown as: - // "Unable to parse data". See crbug.com/488257 - // convertable_values[i]->AppendAsTraceFormat(arg_values_string + i); - } else { - TraceEvent::TraceValue trace_event; - trace_event.as_uint = arg_values[i]; - TraceEvent::AppendValueAsJSON(arg_types[i], trace_event, - arg_values_string + i); - } - } - - EventWriteChromeEvent( - name, phase_string, num_args > 0 ? arg_names[0] : "", - arg_values_string[0].c_str(), num_args > 1 ? arg_names[1] : "", - arg_values_string[1].c_str(), num_args > 2 ? arg_names[2] : "", - arg_values_string[2].c_str()); -} - -// static -void TraceEventETWExport::AddCompleteEndEvent(const char* name) { - auto* instance = GetInstance(); - if (!instance || !instance->etw_export_enabled_ || !EventEnabledChromeEvent()) - return; - - EventWriteChromeEvent(name, "Complete End", "", "", "", "", "", ""); -} - -// static -bool TraceEventETWExport::IsCategoryGroupEnabled( - StringPiece category_group_name) { - DCHECK(!category_group_name.empty()); - auto* instance = GetInstance(); - if (instance == nullptr) - return false; - - if (!instance->IsETWExportEnabled()) - return false; - - CStringTokenizer category_group_tokens(category_group_name.begin(), - category_group_name.end(), ","); - while (category_group_tokens.GetNext()) { - StringPiece category_group_token = category_group_tokens.token_piece(); - if (instance->IsCategoryEnabled(category_group_token)) { - return true; - } - } - return false; -} - -bool TraceEventETWExport::UpdateEnabledCategories() { - if (etw_match_any_keyword_ == CHROME_Context.MatchAnyKeyword) - return false; - - // If the keyword has changed, update each category. - // Chrome_Context.MatchAnyKeyword is set by UIforETW (or other ETW trace - // recording tools) using the ETW infrastructure. This value will be set in - // all Chrome processes that have registered their ETW provider. - etw_match_any_keyword_ = CHROME_Context.MatchAnyKeyword; - for (size_t i = 0; i < ARRAYSIZE(kFilteredEventGroupNames); i++) { - if (etw_match_any_keyword_ & (1ULL << i)) { - categories_status_[kFilteredEventGroupNames[i]] = true; - } else { - categories_status_[kFilteredEventGroupNames[i]] = false; - } - } - - // Also update the two default categories. - if (etw_match_any_keyword_ & kOtherEventsKeywordBit) { - categories_status_[kOtherEventsGroupName] = true; - } else { - categories_status_[kOtherEventsGroupName] = false; - } - if (etw_match_any_keyword_ & kDisabledOtherEventsKeywordBit) { - categories_status_[kDisabledOtherEventsGroupName] = true; - } else { - categories_status_[kDisabledOtherEventsGroupName] = false; - } - - DCHECK_EQ(kNumberOfCategories, categories_status_.size()); - - // Update the categories in TraceLog. - TraceLog::GetInstance()->UpdateETWCategoryGroupEnabledFlags(); - - return true; -} - -bool TraceEventETWExport::IsCategoryEnabled(StringPiece category_name) const { - DCHECK_EQ(kNumberOfCategories, categories_status_.size()); - // Try to find the category and return its status if found - auto it = categories_status_.find(category_name); - if (it != categories_status_.end()) - return it->second; - - // Otherwise return the corresponding default status by first checking if the - // category is disabled by default. - if (category_name.starts_with("disabled-by-default")) { - DCHECK(categories_status_.find(kDisabledOtherEventsGroupName) != - categories_status_.end()); - return categories_status_.find(kDisabledOtherEventsGroupName)->second; - } else { - DCHECK(categories_status_.find(kOtherEventsGroupName) != - categories_status_.end()); - return categories_status_.find(kOtherEventsGroupName)->second; - } -} - -// static -void TraceEventETWExport::UpdateETWKeyword() { - if (!IsETWExportEnabled()) - return; - auto* instance = GetInstance(); - DCHECK(instance); - instance->UpdateEnabledCategories(); -} -} // namespace trace_event -} // namespace base
diff --git a/base/trace_event/trace_event_etw_export_win.h b/base/trace_event/trace_event_etw_export_win.h deleted file mode 100644 index 8a85b22..0000000 --- a/base/trace_event/trace_event_etw_export_win.h +++ /dev/null
@@ -1,99 +0,0 @@ -// Copyright 2015 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. - -// This file contains the Windows-specific exporting to ETW. -#ifndef BASE_TRACE_EVENT_TRACE_EVENT_ETW_EXPORT_WIN_H_ -#define BASE_TRACE_EVENT_TRACE_EVENT_ETW_EXPORT_WIN_H_ - -#include <stdint.h> - -#include <map> - -#include "base/base_export.h" -#include "base/macros.h" -#include "base/strings/string_piece.h" -#include "base/trace_event/trace_event_impl.h" - -namespace base { - -template <typename Type> -struct StaticMemorySingletonTraits; - -namespace trace_event { - -class BASE_EXPORT TraceEventETWExport { - public: - ~TraceEventETWExport(); - - // Retrieves the singleton. - // Note that this may return NULL post-AtExit processing. - static TraceEventETWExport* GetInstance(); - - // Enables/disables exporting of events to ETW. If disabled, - // AddEvent and AddCustomEvent will simply return when called. - static void EnableETWExport(); - static void DisableETWExport(); - - // Returns true if ETW is enabled. For now, this is true if the command line - // flag is specified. - static bool IsETWExportEnabled(); - - // Exports an event to ETW. This is mainly used in - // TraceLog::AddTraceEventWithThreadIdAndTimestamp to export internal events. - static void AddEvent( - char phase, - const unsigned char* category_group_enabled, - const char* name, - unsigned long long id, - int num_args, - const char* const* arg_names, - const unsigned char* arg_types, - const unsigned long long* arg_values, - const std::unique_ptr<ConvertableToTraceFormat>* convertable_values); - - // Exports an ETW event that marks the end of a complete event. - static void AddCompleteEndEvent(const char* name); - - // Returns true if any category in the group is enabled. - static bool IsCategoryGroupEnabled(StringPiece category_group_name); - - private: - // Ensure only the provider can construct us. - friend struct StaticMemorySingletonTraits<TraceEventETWExport>; - // To have access to UpdateKeyword(). - class ETWKeywordUpdateThread; - TraceEventETWExport(); - - // Updates the list of enabled categories by consulting the ETW keyword. - // Returns true if there was a change, false otherwise. - bool UpdateEnabledCategories(); - - // Returns true if the category is enabled. - bool IsCategoryEnabled(StringPiece category_name) const; - - // Called back by the update thread to check for potential changes to the - // keyword. - static void UpdateETWKeyword(); - - // True if ETW is enabled. Allows hiding the exporting behind a flag. - bool etw_export_enabled_; - - // Maps category names to their status (enabled/disabled). - std::map<StringPiece, bool> categories_status_; - - // Local copy of the ETW keyword. - uint64_t etw_match_any_keyword_; - - // Background thread that monitors changes to the ETW keyword and updates - // the enabled categories when a change occurs. - std::unique_ptr<ETWKeywordUpdateThread> keyword_update_thread_; - PlatformThreadHandle keyword_update_thread_handle_; - - DISALLOW_COPY_AND_ASSIGN(TraceEventETWExport); -}; - -} // namespace trace_event -} // namespace base - -#endif // BASE_TRACE_EVENT_TRACE_EVENT_ETW_EXPORT_WIN_H_
diff --git a/base/trace_event/trace_log.cc b/base/trace_event/trace_log.cc index 0012c09..f608261 100644 --- a/base/trace_event/trace_log.cc +++ b/base/trace_event/trace_log.cc
@@ -45,10 +45,6 @@ #include "base/trace_event/trace_event.h" #include "build_config.h" -#if defined(OS_WIN) -#include "base/trace_event/trace_event_etw_export_win.h" -#endif - #if defined(OS_ANDROID) // The linker assigns the virtual address of the start of current library to // this symbol. @@ -483,13 +479,6 @@ state_flags |= TraceCategory::ENABLED_FOR_RECORDING; } -#if defined(OS_WIN) - if (base::trace_event::TraceEventETWExport::IsCategoryGroupEnabled( - category->name())) { - state_flags |= TraceCategory::ENABLED_FOR_ETW_EXPORT; - } -#endif - uint32_t enabled_filters_bitmap = 0; int index = 0; for (const auto& event_filter : enabled_event_filters_) { @@ -1243,15 +1232,6 @@ } } -#if defined(OS_WIN) - // This is done sooner rather than later, to avoid creating the event and - // acquiring the lock, which is not needed for ETW as it's already threadsafe. - if (*category_group_enabled & TraceCategory::ENABLED_FOR_ETW_EXPORT) - TraceEventETWExport::AddEvent(phase, category_group_enabled, name, id, - num_args, arg_names, arg_types, arg_values, - convertable_values); -#endif // OS_WIN - AddTraceEventOverrideCallback trace_event_override = reinterpret_cast<AddTraceEventOverrideCallback>( subtle::NoBarrier_Load(&trace_event_override_)); @@ -1452,12 +1432,6 @@ return; AutoThreadLocalBoolean thread_is_in_trace_event(&thread_is_in_trace_event_); -#if defined(OS_WIN) - // Generate an ETW event that marks the end of a complete event. - if (category_group_enabled_local & TraceCategory::ENABLED_FOR_ETW_EXPORT) - TraceEventETWExport::AddCompleteEndEvent(name); -#endif // OS_WIN - std::string console_message; if (category_group_enabled_local & TraceCategory::ENABLED_FOR_RECORDING) { AddTraceEventOverrideCallback trace_event_override = @@ -1702,21 +1676,6 @@ kTraceEventVectorBufferChunks); } -#if defined(OS_WIN) -void TraceLog::UpdateETWCategoryGroupEnabledFlags() { - // Go through each category and set/clear the ETW bit depending on whether the - // category is enabled. - for (TraceCategory& category : CategoryRegistry::GetAllCategories()) { - if (base::trace_event::TraceEventETWExport::IsCategoryGroupEnabled( - category.name())) { - category.set_state_flag(TraceCategory::ENABLED_FOR_ETW_EXPORT); - } else { - category.clear_state_flag(TraceCategory::ENABLED_FOR_ETW_EXPORT); - } - } -} -#endif // defined(OS_WIN) - void TraceLog::SetTraceBufferForTesting( std::unique_ptr<TraceBuffer> trace_buffer) { AutoLock lock(lock_);
diff --git a/base/trace_event/trace_log.h b/base/trace_event/trace_log.h index 56df18d..e480323 100644 --- a/base/trace_event/trace_log.h +++ b/base/trace_event/trace_log.h
@@ -343,13 +343,6 @@ // may not handle the flush request in time causing lost of unflushed events. void SetCurrentThreadBlocksMessageLoop(); -#if defined(OS_WIN) - // This function is called by the ETW exporting module whenever the ETW - // keyword (flags) changes. This keyword indicates which categories should be - // exported, so whenever it changes, we adjust accordingly. - void UpdateETWCategoryGroupEnabledFlags(); -#endif - // Replaces |logged_events_| with a new TraceBuffer for testing. void SetTraceBufferForTesting(std::unique_ptr<TraceBuffer> trace_buffer);
diff --git a/base/win/scoped_handle_verifier.cc b/base/win/scoped_handle_verifier.cc index 6a73677..930d147 100644 --- a/base/win/scoped_handle_verifier.cc +++ b/base/win/scoped_handle_verifier.cc
@@ -12,7 +12,6 @@ #include "base/debug/alias.h" #include "base/debug/stack_trace.h" #include "base/synchronization/lock_impl.h" -#include "base/win/base_win_buildflags.h" #include "base/win/current_module.h" extern "C" {
diff --git a/base/win/scoped_winrt_initializer.cc b/base/win/scoped_winrt_initializer.cc deleted file mode 100644 index e05679a..0000000 --- a/base/win/scoped_winrt_initializer.cc +++ /dev/null
@@ -1,38 +0,0 @@ -// Copyright 2017 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/win/scoped_winrt_initializer.h" - -#include "base/logging.h" -#include "base/win/com_init_util.h" -#include "base/win/core_winrt_util.h" -#include "base/win/windows_version.h" - -namespace base { -namespace win { - -ScopedWinrtInitializer::ScopedWinrtInitializer() - : hr_(base::win::RoInitialize(RO_INIT_MULTITHREADED)) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DCHECK_GE(GetVersion(), VERSION_WIN8); -#if DCHECK_IS_ON() - if (SUCCEEDED(hr_)) - AssertComApartmentType(ComApartmentType::MTA); - else - DCHECK_NE(RPC_E_CHANGED_MODE, hr_) << "Invalid COM thread model change"; -#endif -} - -ScopedWinrtInitializer::~ScopedWinrtInitializer() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (SUCCEEDED(hr_)) - base::win::RoUninitialize(); -} - -bool ScopedWinrtInitializer::Succeeded() const { - return SUCCEEDED(hr_); -} - -} // namespace win -} // namespace base
diff --git a/base/win/scoped_winrt_initializer.h b/base/win/scoped_winrt_initializer.h deleted file mode 100644 index 7c76515..0000000 --- a/base/win/scoped_winrt_initializer.h +++ /dev/null
@@ -1,48 +0,0 @@ -// Copyright 2017 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. - -#ifndef BASE_WIN_SCOPED_WINRT_INITIALIZER_H_ -#define BASE_WIN_SCOPED_WINRT_INITIALIZER_H_ - -#include <objbase.h> - -#include "base/base_export.h" -#include "base/threading/thread_checker.h" -#include "base/win/scoped_windows_thread_environment.h" - -namespace base { -namespace win { - -// Initializes the Windows Runtime in the constructor and uninitalizes the -// Windows Runtime in the destructor. As a side effect, COM is also initialized -// as an MTA in the constructor and correspondingly uninitialized in the -// destructor. -// -// Generally, you should only use this on Windows 8 or above. It is redundant -// to use ScopedComInitializer in conjunction with ScopedWinrtInitializer. -// -// WARNING: This should only be used once per thread, ideally scoped to a -// similar lifetime as the thread itself. You should not be using this in random -// utility functions that make Windows Runtime calls -- instead ensure these -// functions are running on a Windows Runtime supporting thread! -class BASE_EXPORT ScopedWinrtInitializer - : public ScopedWindowsThreadEnvironment { - public: - ScopedWinrtInitializer(); - ~ScopedWinrtInitializer() override; - - // ScopedWindowsThreadEnvironment: - bool Succeeded() const override; - - private: - const HRESULT hr_; - THREAD_CHECKER(thread_checker_); - - DISALLOW_COPY_AND_ASSIGN(ScopedWinrtInitializer); -}; - -} // namespace win -} // namespace base - -#endif // BASE_WIN_SCOPED_WINRT_INITIALIZER_H_
diff --git a/build/build_win.ninja.template b/build/build_win.ninja.template index f5f8b65..3edfb6a 100644 --- a/build/build_win.ninja.template +++ b/build/build_win.ninja.template
@@ -1,27 +1,25 @@ -arch = environment.x64 - rule cc - command = ninja -t msvc -e $arch -- $cc /nologo /showIncludes /FC @${out}.rsp /c ${in} /Fo${out} + command = ninja -t msvc -- $cc /nologo /showIncludes /FC @${out}.rsp /c ${in} /Fo${out} description = CC ${out} rspfile = ${out}.rsp rspfile_content = ${defines} ${includes} ${cflags} ${cflags_c} deps = msvc rule cxx - command = ninja -t msvc -e $arch -- $cxx /nologo /showIncludes /FC @${out}.rsp /c ${in} /Fo${out} + command = ninja -t msvc -- $cxx /nologo /showIncludes /FC @${out}.rsp /c ${in} /Fo${out} description = CXX ${out} rspfile = ${out}.rsp rspfile_content = ${defines} ${includes} ${cflags} ${cflags_cc} deps = msvc rule alink_thin - command = ninja -t msvc -e $arch -- $ar /nologo /ignore:4221 /OUT:${out} @${out}.rsp + command = ninja -t msvc -- $ar /nologo /ignore:4221 /OUT:${out} @${out}.rsp description = LIB ${out} rspfile = ${out}.rsp - rspfile_content = ${in_newline} + rspfile_content = ${in_newline} ${libflags} rule link - command = ninja -t msvc -e $arch -- $ld /nologo /OUT:${out} /PDB:${out}.pdb @${out}.rsp + command = ninja -t msvc -- $ld /nologo /OUT:${out} /PDB:${out}.pdb @${out}.rsp description = LINK ${out} rspfile = ${out}.rsp rspfile_content = ${in_newline} ${libs} ${solibs} ${ldflags}
diff --git a/build/gen.py b/build/gen.py index 6d551eb..6c73d4e 100755 --- a/build/gen.py +++ b/build/gen.py
@@ -47,8 +47,8 @@ def write_generic_ninja(path, static_libraries, executables, - cc, cxx, ar, ld, - cflags=[], cflags_cc=[], ldflags=[], + cc, cxx, ar, ld, options, + cflags=[], cflags_cc=[], ldflags=[], libflags=[], include_dirs=[], solibs=[]): ninja_header_lines = [ 'cc = ' + cc, @@ -57,7 +57,8 @@ 'ld = ' + ld, '', 'rule regen', - ' command = %s ../build/gen.py' % sys.executable, + ' command = %s ../build/gen.py%s' % ( + sys.executable, ' -d' if options.debug else ''), ' description = Regenerating ninja files', '', 'build build.ninja: regen', @@ -116,6 +117,8 @@ ninja_lines.append('build %s: alink_thin %s' % ( library_to_a(library), ' '.join([src_to_obj(src_file) for src_file in settings['sources']]))) + ninja_lines.append(' libflags = %s' % ' '.join(libflags)) + for executable, settings in executables.iteritems(): for src_file in settings['sources']: @@ -161,6 +164,7 @@ cflags = os.environ.get('CFLAGS', '').split() cflags_cc = os.environ.get('CXXFLAGS', '').split() ldflags = os.environ.get('LDFLAGS', '').split() + libflags = os.environ.get('LIBFLAGS', '').split() include_dirs = [REPO_ROOT, os.path.join(REPO_ROOT, 'src')] libs = [] @@ -191,24 +195,37 @@ elif is_win: if not options.debug: cflags.extend(['/Ox', '/DNDEBUG', '/GL']) + libflags.extend(['/LTCG']) ldflags.extend(['/LTCG', '/OPT:REF', '/OPT:ICF']) cflags.extend([ + '/DNOMINMAX', + '/DUNICODE', + '/DWIN32_LEAN_AND_MEAN', + '/DWINVER=0x0A00', + '/D_CRT_SECURE_NO_DEPRECATE', + '/D_SCL_SECURE_NO_DEPRECATE', + '/D_UNICODE', + '/D_WIN32_WINNT=0x0A00', '/FS', '/Gy', - '/W3', '/wd4244', + '/W4', + '/WX', '/Zi', - '/DWIN32_LEAN_AND_MEAN', '/DNOMINMAX', - '/D_CRT_SECURE_NO_DEPRECATE', '/D_SCL_SECURE_NO_DEPRECATE', - '/D_WIN32_WINNT=0x0A00', '/DWINVER=0x0A00', - '/DUNICODE', '/D_UNICODE', + '/wd4099', + '/wd4100', + '/wd4127', + '/wd4244', + '/wd4267', + '/wd4838', + '/wd4996', ]) cflags_cc.extend([ '/GR-', '/D_HAS_EXCEPTIONS=0', ]) - ldflags.extend(['/MACHINE:x64']) + ldflags.extend(['/DEBUG', '/MACHINE:x64']) static_libraries = { 'base': {'sources': [ @@ -789,7 +806,6 @@ 'base/threading/thread_local_storage_win.cc', 'base/time/time_win.cc', 'base/timer/hi_res_timer_manager_win.cc', - 'base/trace_event/trace_event_etw_export_win.cc', 'base/win/core_winrt_util.cc', 'base/win/enum_variant.cc', 'base/win/event_trace_controller.cc', @@ -809,7 +825,6 @@ 'base/win/scoped_handle_verifier.cc', 'base/win/scoped_process_information.cc', 'base/win/scoped_variant.cc', - 'base/win/scoped_winrt_initializer.cc', 'base/win/shortcut.cc', 'base/win/startup_information.cc', 'base/win/wait_chain.cc', @@ -837,7 +852,8 @@ executables['gn_unittests']['libs'].extend(static_libraries.keys()) write_generic_ninja(path, static_libraries, executables, cc, cxx, ar, ld, - cflags, cflags_cc, ldflags, include_dirs, libs) + options, cflags, cflags_cc, ldflags, libflags, + include_dirs, libs) if __name__ == '__main__':
diff --git a/src/test/gn_test.cc b/src/test/gn_test.cc index 4d16195..0763048 100644 --- a/src/test/gn_test.cc +++ b/src/test/gn_test.cc
@@ -120,10 +120,13 @@ } } - int nactivetests = 0; - for (int i = 0; i < ntests; i++) - if ((tests[i].should_run = TestMatchesFilter(tests[i].name, test_filter))) - ++nactivetests; + int num_active_tests = 0; + for (int i = 0; i < ntests; i++) { + tests[i].should_run = TestMatchesFilter(tests[i].name, test_filter); + if (tests[i].should_run) { + ++num_active_tests; + } + } const char* prefix = ""; const char* suffix = "\n"; @@ -143,8 +146,8 @@ ++tests_started; testing::Test* test = tests[i].factory(); - printf("%s[%d/%d] %s%s", prefix, tests_started, nactivetests, tests[i].name, - suffix); + printf("%s[%d/%d] %s%s", prefix, tests_started, num_active_tests, + tests[i].name, suffix); test->SetUp(); test->Run(); test->TearDown();
diff --git a/tools/gn/input_conversion.cc b/tools/gn/input_conversion.cc index a7abcf4..22d33ca 100644 --- a/tools/gn/input_conversion.cc +++ b/tools/gn/input_conversion.cc
@@ -142,7 +142,7 @@ case base::Value::Type::DICTIONARY: { std::unique_ptr<Scope> scope = std::make_unique<Scope>(settings); for (const auto& it : value.DictItems()) { - Value value = + Value parsed_value = ParseJSONValue(settings, it.second, origin, input_file, err); if (!IsIdentifier(it.first)) { *err = Err(origin, "Invalid identifier \"" + it.first + "\"."); @@ -158,7 +158,7 @@ } base::StringPiece key(&input_file->contents()[off + 1], it.first.size()); - scope->SetValue(key, std::move(value), origin); + scope->SetValue(key, std::move(parsed_value), origin); } return Value(origin, std::move(scope)); } @@ -166,8 +166,9 @@ Value result(origin, Value::LIST); result.list_value().reserve(value.GetList().size()); for (const auto& val : value.GetList()) { - Value value = ParseJSONValue(settings, val, origin, input_file, err); - result.list_value().push_back(value); + Value parsed_value = + ParseJSONValue(settings, val, origin, input_file, err); + result.list_value().push_back(parsed_value); } return result; }