15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#ifndef UI_GFX_X_X11_ATOM_CACHE_H_ 668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#define UI_GFX_X_X11_ATOM_CACHE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/basictypes.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/gfx_export.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/x/x11_types.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Pre-caches all Atoms on first use to minimize roundtrips to the X11 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// server. By default, GetAtom() will CHECK() that atoms accessed through 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GetAtom() were passed to the constructor, but this behaviour can be changed 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with allow_uncached_atoms(). 2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class GFX_EXPORT X11AtomCache { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Preinterns the NULL terminated list of string |to_cache_ on |xdisplay|. 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) X11AtomCache(XDisplay* xdisplay, const char** to_cache); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~X11AtomCache(); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the pre-interned Atom without having to go to the x server. 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch XAtom GetAtom(const char*) const; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When an Atom isn't in the list of items we've cached, we should look it 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // up, cache it locally, and then return the result. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void allow_uncached_atoms() { uncached_atoms_allowed_ = true; } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) XDisplay* xdisplay_; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool uncached_atoms_allowed_; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mutable std::map<std::string, XAtom> cached_atoms_; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(X11AtomCache); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ui 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#endif // UI_GFX_X_X11_ATOM_CACHE_H_ 47