Edit

kc3-lang/angle/include/platform

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2015-04-20 16:32:13
    Hash : ad0a486b
    Message : Add D3D11CreateDevice timing histogram. This should give us a bound on how much we can improve startup time in ANGLE on D3D11 across all users. BUG=angleproject:944 BUG=436191 Change-Id: Ie9047c0424429aecec5f6d7be8e119ebcc53fbe3 Reviewed-on: https://chromium-review.googlesource.com/266524 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Zhenyao Mo <zmo@chromium.org>

  • Platform.h
  • //
    // Copyright (c) 2015 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.
    
    // Platform.h: The public interface ANGLE exposes to the API layer, for
    //   doing platform-specific tasks like gathering data, or for tracing.
    
    #ifndef ANGLE_PLATFORM_H
    #define ANGLE_PLATFORM_H
    
    #include <stdint.h>
    
    #include "../export.h"
    
    namespace angle
    {
    
    class Platform
    {
      public:
    
        // System --------------------------------------------------------------
    
        // Wall clock time in seconds since the epoch.
        // TODO(jmadill): investigate using an ANGLE internal time library
        virtual double currentTime() { return 0; }
    
        // Monotonically increasing time in seconds from an arbitrary fixed point in the past.
        // This function is expected to return at least millisecond-precision values. For this reason,
        // it is recommended that the fixed point be no further in the past than the epoch.
        virtual double monotonicallyIncreasingTime() { return 0; }
    
        // Tracing --------
    
        // Get a pointer to the enabled state of the given trace category. The
        // embedder can dynamically change the enabled state as trace event
        // recording is started and stopped by the application. Only long-lived
        // literal strings should be given as the category name. The implementation
        // expects the returned pointer to be held permanently in a local static. If
        // the unsigned char is non-zero, tracing is enabled. If tracing is enabled,
        // addTraceEvent is expected to be called by the trace event macros.
        virtual const unsigned char *getTraceCategoryEnabledFlag(const char *categoryName) { return 0; }
    
        typedef uint64_t TraceEventHandle;
    
        // Add a trace event to the platform tracing system. Depending on the actual
        // enabled state, this event may be recorded or dropped.
        // - phase specifies the type of event:
        //   - BEGIN ('B'): Marks the beginning of a scoped event.
        //   - END ('E'): Marks the end of a scoped event.
        //   - COMPLETE ('X'): Marks the beginning of a scoped event, but doesn't
        //     need a matching END event. Instead, at the end of the scope,
        //     updateTraceEventDuration() must be called with the TraceEventHandle
        //     returned from addTraceEvent().
        //   - INSTANT ('I'): Standalone, instantaneous event.
        //   - START ('S'): Marks the beginning of an asynchronous event (the end
        //     event can occur in a different scope or thread). The id parameter is
        //     used to match START/FINISH pairs.
        //   - FINISH ('F'): Marks the end of an asynchronous event.
        //   - COUNTER ('C'): Used to trace integer quantities that change over
        //     time. The argument values are expected to be of type int.
        //   - METADATA ('M'): Reserved for internal use.
        // - categoryEnabled is the pointer returned by getTraceCategoryEnabledFlag.
        // - name is the name of the event. Also used to match BEGIN/END and
        //   START/FINISH pairs.
        // - id optionally allows events of the same name to be distinguished from
        //   each other. For example, to trace the consutruction and destruction of
        //   objects, specify the pointer as the id parameter.
        // - timestamp should be a time value returned from monotonicallyIncreasingTime.
        // - numArgs specifies the number of elements in argNames, argTypes, and
        //   argValues.
        // - argNames is the array of argument names. Use long-lived literal strings
        //   or specify the COPY flag.
        // - argTypes is the array of argument types:
        //   - BOOL (1): bool
        //   - UINT (2): unsigned long long
        //   - INT (3): long long
        //   - DOUBLE (4): double
        //   - POINTER (5): void*
        //   - STRING (6): char* (long-lived null-terminated char* string)
        //   - COPY_STRING (7): char* (temporary null-terminated char* string)
        //   - CONVERTABLE (8): WebConvertableToTraceFormat
        // - argValues is the array of argument values. Each value is the unsigned
        //   long long member of a union of all supported types.
        // - flags can be 0 or one or more of the following, ORed together:
        //   - COPY (0x1): treat all strings (name, argNames and argValues of type
        //     string) as temporary so that they will be copied by addTraceEvent.
        //   - HAS_ID (0x2): use the id argument to uniquely identify the event for
        //     matching with other events of the same name.
        //   - MANGLE_ID (0x4): specify this flag if the id parameter is the value
        //     of a pointer.
        virtual TraceEventHandle addTraceEvent(char phase,
                                               const unsigned char *categoryEnabledFlag,
                                               const char *name,
                                               unsigned long long id,
                                               double timestamp,
                                               int numArgs,
                                               const char **argNames,
                                               const unsigned char *argTypes,
                                               const unsigned long long *argValues,
                                               unsigned char flags)
        {
            return 0;
        }
    
        // Set the duration field of a COMPLETE trace event.
        virtual void updateTraceEventDuration(const unsigned char *categoryEnabledFlag, const char *name, TraceEventHandle eventHandle) { }
    
        // Callbacks for reporting histogram data.
        // CustomCounts histogram has exponential bucket sizes, so that min=1, max=1000000, bucketCount=50 would do.
        virtual void histogramCustomCounts(const char *name, int sample, int min, int max, int bucketCount) { }
        // Enumeration histogram buckets are linear, boundaryValue should be larger than any possible sample value.
        virtual void histogramEnumeration(const char *name, int sample, int boundaryValue) { }
        // Unlike enumeration histograms, sparse histograms only allocate memory for non-empty buckets.
        virtual void histogramSparse(const char *name, int sample) { }
    
      protected:
        virtual ~Platform() { }
    };
    
    }
    
    typedef void(*ANGLEPlatformInitializeFunc)(angle::Platform*);
    ANGLE_EXPORT void ANGLEPlatformInitialize(angle::Platform*);
    
    typedef void (*ANGLEPlatformShutdownFunc)();
    ANGLE_EXPORT void ANGLEPlatformShutdown();
    
    typedef angle::Platform *(*ANGLEPlatformCurrentFunc)();
    ANGLE_EXPORT angle::Platform *ANGLEPlatformCurrent();
    
    #endif // ANGLE_PLATFORM_H