Edit

kc3-lang/angle/src/libANGLE/Thread.h

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2016-11-10 10:42:48
    Hash : 7b8f3c9b
    Message : Encapsulate the thread local storage into an egl::Thread class. Instead of having separate GetGlobal* functions, interact with the global objects through a single Thread object. This reduces the number of TLS lookups in many EGL functions and allows the Thread object to be passed down to other objects if needed. BUG=angleproject:1618 Change-Id: I1f9a89e8899d637633f4e91fda0e38ac308dd020 Reviewed-on: https://chromium-review.googlesource.com/409637 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>

  • src/libANGLE/Thread.h
  • //
    // Copyright(c) 2016 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    // Thread.h : Defines the Thread class which represents a global EGL thread.
    
    #ifndef LIBANGLE_THREAD_H_
    #define LIBANGLE_THREAD_H_
    
    #include <EGL/egl.h>
    
    namespace gl
    {
    class Context;
    }  // namespace gl
    
    namespace egl
    {
    class Error;
    class Display;
    class Surface;
    
    class Thread
    {
      public:
        Thread();
    
        void setError(const Error &error);
        EGLint getError() const;
    
        void setAPI(EGLenum api);
        EGLenum getAPI() const;
    
        void setCurrent(Display *display,
                        Surface *drawSurface,
                        Surface *readSurface,
                        gl::Context *context);
        Display *getDisplay() const;
        Surface *getDrawSurface() const;
        Surface *getReadSurface() const;
        gl::Context *getContext() const;
        gl::Context *getValidContext() const;
    
      private:
        EGLint mError;
        EGLenum mAPI;
        egl::Display *mDisplay;
        egl::Surface *mDrawSurface;
        egl::Surface *mReadSurface;
        gl::Context *mContext;
    };
    
    }  // namespace egl
    
    #endif  // LIBANGLE_THREAD_H_