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

Side by Side Diff: base/message_loop/message_pump_win.cc

Issue 1852143002: win: Remove GetModuleFromAddress, deduplicate __ImageBase code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 8 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/message_loop/message_pump_win.h" 5 #include "base/message_loop/message_pump_win.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <limits> 10 #include <limits>
11 11
12 #include "base/message_loop/message_loop.h" 12 #include "base/message_loop/message_loop.h"
13 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
14 #include "base/process/memory.h"
15 #include "base/strings/stringprintf.h" 14 #include "base/strings/stringprintf.h"
16 #include "base/trace_event/trace_event.h" 15 #include "base/trace_event/trace_event.h"
16 #include "base/win/current_module.h"
17 #include "base/win/wrapped_window_proc.h" 17 #include "base/win/wrapped_window_proc.h"
18 18
19 namespace base { 19 namespace base {
20 20
21 namespace { 21 namespace {
22 22
23 enum MessageLoopProblems { 23 enum MessageLoopProblems {
24 MESSAGE_POST_ERROR, 24 MESSAGE_POST_ERROR,
25 COMPLETION_POST_ERROR, 25 COMPLETION_POST_ERROR,
26 SET_TIMER_ERROR, 26 SET_TIMER_ERROR,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 //----------------------------------------------------------------------------- 82 //-----------------------------------------------------------------------------
83 // MessagePumpForUI public: 83 // MessagePumpForUI public:
84 84
85 MessagePumpForUI::MessagePumpForUI() 85 MessagePumpForUI::MessagePumpForUI()
86 : atom_(0) { 86 : atom_(0) {
87 InitMessageWnd(); 87 InitMessageWnd();
88 } 88 }
89 89
90 MessagePumpForUI::~MessagePumpForUI() { 90 MessagePumpForUI::~MessagePumpForUI() {
91 DestroyWindow(message_hwnd_); 91 DestroyWindow(message_hwnd_);
92 UnregisterClass(MAKEINTATOM(atom_), 92 UnregisterClass(MAKEINTATOM(atom_), CURRENT_MODULE());
93 GetModuleFromAddress(&WndProcThunk));
94 } 93 }
95 94
96 void MessagePumpForUI::ScheduleWork() { 95 void MessagePumpForUI::ScheduleWork() {
97 if (InterlockedExchange(&have_work_, 1)) 96 if (InterlockedExchange(&have_work_, 1))
98 return; // Someone else continued the pumping. 97 return; // Someone else continued the pumping.
99 98
100 // Make sure the MessagePump does some work for us. 99 // Make sure the MessagePump does some work for us.
101 BOOL ret = PostMessage(message_hwnd_, kMsgHaveWork, 100 BOOL ret = PostMessage(message_hwnd_, kMsgHaveWork,
102 reinterpret_cast<WPARAM>(this), 0); 101 reinterpret_cast<WPARAM>(this), 0);
103 if (ret) 102 if (ret)
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 continue; 190 continue;
192 191
193 WaitForWork(); // Wait (sleep) until we have work to do again. 192 WaitForWork(); // Wait (sleep) until we have work to do again.
194 } 193 }
195 } 194 }
196 195
197 void MessagePumpForUI::InitMessageWnd() { 196 void MessagePumpForUI::InitMessageWnd() {
198 // Generate a unique window class name. 197 // Generate a unique window class name.
199 string16 class_name = StringPrintf(kWndClassFormat, this); 198 string16 class_name = StringPrintf(kWndClassFormat, this);
200 199
201 HINSTANCE instance = GetModuleFromAddress(&WndProcThunk); 200 HINSTANCE instance = CURRENT_MODULE();
202 WNDCLASSEX wc = {0}; 201 WNDCLASSEX wc = {0};
203 wc.cbSize = sizeof(wc); 202 wc.cbSize = sizeof(wc);
204 wc.lpfnWndProc = base::win::WrappedWindowProc<WndProcThunk>; 203 wc.lpfnWndProc = base::win::WrappedWindowProc<WndProcThunk>;
205 wc.hInstance = instance; 204 wc.hInstance = instance;
206 wc.lpszClassName = class_name.c_str(); 205 wc.lpszClassName = class_name.c_str();
207 atom_ = RegisterClassEx(&wc); 206 atom_ = RegisterClassEx(&wc);
208 DCHECK(atom_); 207 DCHECK(atom_);
209 208
210 message_hwnd_ = CreateWindow(MAKEINTATOM(atom_), 0, 0, 0, 0, 0, 0, 209 message_hwnd_ = CreateWindow(MAKEINTATOM(atom_), 0, 0, 0, 0, 0, 0,
211 HWND_MESSAGE, 0, instance, 0); 210 HWND_MESSAGE, 0, instance, 0);
(...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 632
634 // static 633 // static
635 MessagePumpForIO::IOHandler* MessagePumpForIO::KeyToHandler( 634 MessagePumpForIO::IOHandler* MessagePumpForIO::KeyToHandler(
636 ULONG_PTR key, 635 ULONG_PTR key,
637 bool* has_valid_io_context) { 636 bool* has_valid_io_context) {
638 *has_valid_io_context = ((key & 1) == 0); 637 *has_valid_io_context = ((key & 1) == 0);
639 return reinterpret_cast<IOHandler*>(key & ~static_cast<ULONG_PTR>(1)); 638 return reinterpret_cast<IOHandler*>(key & ~static_cast<ULONG_PTR>(1));
640 } 639 }
641 640
642 } // namespace base 641 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698