diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-19 19:38:29 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-19 19:38:29 +0000 |
commit | 106d98f1f1cbeb7e57fe46a4d372582258ad0c6d (patch) | |
tree | 7c80130f19003631fb373d1d6ba49e5736b15f2b /ui | |
parent | d157173e1e07a47126b94b7e13c16ea266dc9f7d (diff) | |
download | chromium_src-106d98f1f1cbeb7e57fe46a4d372582258ad0c6d.zip chromium_src-106d98f1f1cbeb7e57fe46a4d372582258ad0c6d.tar.gz chromium_src-106d98f1f1cbeb7e57fe46a4d372582258ad0c6d.tar.bz2 |
x11: Move X11ErrorHandler out of //base/ into //ui/gfx/x/
This is a simple file-move, with a notable change for linux-gtk that
instead of using the GDK API for capturing X errors, this patch uses
raw X API (which is currently used on chromeos and linux-aura).
BUG=none
R=brettw@chromium.org, oshima@chromium.org, sky@chromium.org
Review URL: https://codereview.chromium.org/203273006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@258061 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/base/x/x11_util.cc | 10 | ||||
-rw-r--r-- | ui/display/chromeos/x11/DEPS | 3 | ||||
-rw-r--r-- | ui/display/chromeos/x11/native_display_delegate_x11.cc | 4 | ||||
-rw-r--r-- | ui/display/display.gyp | 2 | ||||
-rw-r--r-- | ui/gfx/gfx.gyp | 2 | ||||
-rw-r--r-- | ui/gfx/x/x11_error_tracker.cc | 34 | ||||
-rw-r--r-- | ui/gfx/x/x11_error_tracker.h | 36 |
7 files changed, 84 insertions, 7 deletions
diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc index c71740c..007157c 100644 --- a/ui/base/x/x11_util.cc +++ b/ui/base/x/x11_util.cc @@ -33,7 +33,6 @@ #include "base/strings/stringprintf.h" #include "base/sys_byteorder.h" #include "base/threading/thread.h" -#include "base/x11/x11_error_tracker.h" #include "third_party/skia/include/core/SkBitmap.h" #include "third_party/skia/include/core/SkPostConfig.h" #include "ui/base/x/x11_util_internal.h" @@ -48,6 +47,7 @@ #include "ui/gfx/point_conversions.h" #include "ui/gfx/rect.h" #include "ui/gfx/size.h" +#include "ui/gfx/x/x11_error_tracker.h" #if defined(OS_FREEBSD) #include <sys/sysctl.h> @@ -317,7 +317,7 @@ static SharedMemorySupport DoQuerySharedMemorySupport(XDisplay* dpy) { memset(&shminfo, 0, sizeof(shminfo)); shminfo.shmid = shmkey; - base::X11ErrorTracker err_tracker; + gfx::X11ErrorTracker err_tracker; bool result = XShmAttach(dpy, &shminfo); if (result) VLOG(1) << "X got shared memory segment " << shmkey; @@ -928,7 +928,7 @@ bool SetIntArrayProperty(XID window, for (size_t i = 0; i < value.size(); ++i) data[i] = value[i]; - base::X11ErrorTracker err_tracker; + gfx::X11ErrorTracker err_tracker; XChangeProperty(gfx::GetXDisplay(), window, name_atom, @@ -953,7 +953,7 @@ bool SetAtomArrayProperty(XID window, for (size_t i = 0; i < value.size(); ++i) data[i] = value[i]; - base::X11ErrorTracker err_tracker; + gfx::X11ErrorTracker err_tracker; XChangeProperty(gfx::GetXDisplay(), window, name_atom, @@ -1277,7 +1277,7 @@ bool GetWindowManagerName(std::string* wm_name) { // _NET_SUPPORTING_WM_CHECK property pointing to itself (to avoid a stale // property referencing an ID that's been recycled for another window), so we // check that too. - base::X11ErrorTracker err_tracker; + gfx::X11ErrorTracker err_tracker; int wm_window_property = 0; bool result = GetIntProperty( wm_window, "_NET_SUPPORTING_WM_CHECK", &wm_window_property); diff --git a/ui/display/chromeos/x11/DEPS b/ui/display/chromeos/x11/DEPS new file mode 100644 index 0000000..25c2d71 --- /dev/null +++ b/ui/display/chromeos/x11/DEPS @@ -0,0 +1,3 @@ +include_rules = [ + "+ui/gfx/x", +] diff --git a/ui/display/chromeos/x11/native_display_delegate_x11.cc b/ui/display/chromeos/x11/native_display_delegate_x11.cc index 982d74a..de8a3aa 100644 --- a/ui/display/chromeos/x11/native_display_delegate_x11.cc +++ b/ui/display/chromeos/x11/native_display_delegate_x11.cc @@ -17,12 +17,12 @@ #include "base/message_loop/message_pump_x11.h" #include "base/stl_util.h" #include "base/x11/edid_parser_x11.h" -#include "base/x11/x11_error_tracker.h" #include "ui/display/chromeos/native_display_observer.h" #include "ui/display/chromeos/x11/display_mode_x11.h" #include "ui/display/chromeos/x11/display_snapshot_x11.h" #include "ui/display/chromeos/x11/display_util.h" #include "ui/display/chromeos/x11/native_display_event_dispatcher_x11.h" +#include "ui/gfx/x/x11_error_tracker.h" namespace ui { @@ -465,7 +465,7 @@ bool NativeDisplayDelegateX11::SetHDCPState(const DisplaySnapshot& output, NOTREACHED() << "Invalid HDCP state: " << state; return false; } - base::X11ErrorTracker err_tracker; + gfx::X11ErrorTracker err_tracker; unsigned char* data = reinterpret_cast<unsigned char*>(&value); RROutput output_id = static_cast<const DisplaySnapshotX11&>(output).output(); XRRChangeOutputProperty( diff --git a/ui/display/display.gyp b/ui/display/display.gyp index 48e8a7b..5f766ac 100644 --- a/ui/display/display.gyp +++ b/ui/display/display.gyp @@ -12,6 +12,7 @@ 'type': '<(component)', 'dependencies': [ '../../base/base.gyp:base', + '../../ui/gfx/gfx.gyp:gfx', '../../ui/gfx/gfx.gyp:gfx_geometry', ], 'defines': [ @@ -57,6 +58,7 @@ 'type': '<(component)', 'dependencies': [ '../../base/base.gyp:base', + '../../ui/gfx/gfx.gyp:gfx', '../../ui/gfx/gfx.gyp:gfx_geometry', 'display', ], diff --git a/ui/gfx/gfx.gyp b/ui/gfx/gfx.gyp index 23fe0b7..b712b0b 100644 --- a/ui/gfx/gfx.gyp +++ b/ui/gfx/gfx.gyp @@ -314,6 +314,8 @@ 'win/window_impl.h', 'x/x11_atom_cache.cc', 'x/x11_atom_cache.h', + 'x/x11_error_tracker.cc', + 'x/x11_error_tracker.h', 'x/x11_types.cc', 'x/x11_types.h', ], diff --git a/ui/gfx/x/x11_error_tracker.cc b/ui/gfx/x/x11_error_tracker.cc new file mode 100644 index 0000000..16ed595 --- /dev/null +++ b/ui/gfx/x/x11_error_tracker.cc @@ -0,0 +1,34 @@ +// Copyright 2014 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 "ui/gfx/x/x11_error_tracker.h" + +#include "ui/gfx/x/x11_types.h" + +namespace { + +unsigned char g_x11_error_code = 0; + +int X11ErrorHandler(Display* display, XErrorEvent* error) { + g_x11_error_code = error->error_code; + return 0; +} +} + +namespace gfx { + +X11ErrorTracker::X11ErrorTracker() { + old_handler_ = XSetErrorHandler(X11ErrorHandler); +} + +X11ErrorTracker::~X11ErrorTracker() { XSetErrorHandler(old_handler_); } + +bool X11ErrorTracker::FoundNewError() { + XSync(GetXDisplay(), False); + unsigned char error = g_x11_error_code; + g_x11_error_code = 0; + return error != 0; +} + +} // namespace gfx diff --git a/ui/gfx/x/x11_error_tracker.h b/ui/gfx/x/x11_error_tracker.h new file mode 100644 index 0000000..efcac0c --- /dev/null +++ b/ui/gfx/x/x11_error_tracker.h @@ -0,0 +1,36 @@ +// Copyright 2014 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 UI_GFX_X_X11_ERROR_TRACKER_H_ +#define UI_GFX_X_X11_ERROR_TRACKER_H_ + +#include <X11/Xlib.h> + +#include "base/basictypes.h" +#include "ui/gfx/gfx_export.h" + +namespace gfx { + +// X11ErrorTracker catches X11 errors in a non-fatal way. It does so by +// temporarily changing the X11 error handler. The old error handler is +// restored when the tracker is destroyed. +class GFX_EXPORT X11ErrorTracker { + public: + X11ErrorTracker(); + ~X11ErrorTracker(); + + // Returns whether an X11 error happened since this function was last called + // (or since the creation of the tracker). This is potentially expensive, + // since this causes a sync with the X server. + bool FoundNewError(); + + private: + XErrorHandler old_handler_; + + DISALLOW_COPY_AND_ASSIGN(X11ErrorTracker); +}; + +} // namespace gfx + +#endif // UI_GFX_X_X11_ERROR_TRACKER_H_ |