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

Side by Side Diff: webrtc/system_wrappers/source/condition_variable_native_win.cc

Issue 1601523009: Remove ConditionVariableWrapper. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Move include inside guard Created 4 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 unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
12 #include "webrtc/system_wrappers/include/trace.h"
13 #include "webrtc/system_wrappers/source/condition_variable_native_win.h"
14
15 namespace webrtc {
16
17 static HMODULE library = NULL;
18 static bool win_support_condition_variables_primitive = false;
19
20 PInitializeConditionVariable PInitializeConditionVariable_;
21 PSleepConditionVariableCS PSleepConditionVariableCS_;
22 PWakeConditionVariable PWakeConditionVariable_;
23 PWakeAllConditionVariable PWakeAllConditionVariable_;
24
25 typedef void (WINAPI *PInitializeConditionVariable)(PCONDITION_VARIABLE);
26 typedef BOOL (WINAPI *PSleepConditionVariableCS)(PCONDITION_VARIABLE,
27 PCRITICAL_SECTION, DWORD);
28 typedef void (WINAPI *PWakeConditionVariable)(PCONDITION_VARIABLE);
29 typedef void (WINAPI *PWakeAllConditionVariable)(PCONDITION_VARIABLE);
30
31 ConditionVariableNativeWin::ConditionVariableNativeWin() {
32 }
33
34 ConditionVariableNativeWin::~ConditionVariableNativeWin() {
35 }
36
37 ConditionVariableWrapper* ConditionVariableNativeWin::Create() {
38 ConditionVariableNativeWin* ret_val = new ConditionVariableNativeWin();
39 if (!ret_val->Init()) {
40 delete ret_val;
41 return NULL;
42 }
43 return ret_val;
44 }
45
46 bool ConditionVariableNativeWin::Init() {
47 if (!library) {
48 // Native implementation is supported on Vista+.
49 library = LoadLibrary(TEXT("Kernel32.dll"));
50 // TODO(henrike): this code results in an attempt to load the above dll
51 // every time the previous attempt failed. Only try to load once.
52 if (library) {
53 // TODO(henrike): not thread safe as reading and writing to library is not
54 // serialized. Fix.
55 WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1, "Loaded Kernel.dll");
56
57 PInitializeConditionVariable_ =
58 (PInitializeConditionVariable) GetProcAddress(
59 library, "InitializeConditionVariable");
60 PSleepConditionVariableCS_ = (PSleepConditionVariableCS) GetProcAddress(
61 library, "SleepConditionVariableCS");
62 PWakeConditionVariable_ = (PWakeConditionVariable) GetProcAddress(
63 library, "WakeConditionVariable");
64 PWakeAllConditionVariable_ = (PWakeAllConditionVariable) GetProcAddress(
65 library, "WakeAllConditionVariable");
66
67 if (PInitializeConditionVariable_ && PSleepConditionVariableCS_
68 && PWakeConditionVariable_ && PWakeAllConditionVariable_) {
69 WEBRTC_TRACE(
70 kTraceStateInfo, kTraceUtility, -1,
71 "Loaded native condition variables");
72 win_support_condition_variables_primitive = true;
73 }
74 }
75 }
76 if (!win_support_condition_variables_primitive) {
77 return false;
78 }
79 PInitializeConditionVariable_(&condition_variable_);
80 return true;
81 }
82
83 void ConditionVariableNativeWin::SleepCS(CriticalSectionWrapper& crit_sect) {
84 SleepCS(crit_sect, INFINITE);
85 }
86
87 bool ConditionVariableNativeWin::SleepCS(CriticalSectionWrapper& crit_sect,
88 unsigned long max_time_in_ms) {
89 BOOL ret_val = PSleepConditionVariableCS_(&condition_variable_,
90 &crit_sect.crit_, max_time_in_ms);
91 return ret_val != 0;
92 }
93
94 void ConditionVariableNativeWin::Wake() {
95 PWakeConditionVariable_(&condition_variable_);
96 }
97
98 void ConditionVariableNativeWin::WakeAll() {
99 PWakeAllConditionVariable_(&condition_variable_);
100 }
101
102 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698