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