| // Copyright (C) 2015 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| @handle type string AtomStreamId |
| @handle type string BinaryId |
| @handle type string CaptureId |
| @handle type string DeviceId |
| @handle type string HierarchyId |
| @handle type string ImageInfoId |
| @handle type string MemoryInfoId |
| @handle type string SchemaId |
| @handle type string TimingInfoId |
| |
| // GetCaptures returns the full list of capture identifiers avaliable on the |
| // server. |
| cmd array<CaptureId> GetCaptures() { return ? } |
| |
| // GetDevices returns the full list of replay devices avaliable to the server. |
| // These include local replay devices and any connected Android devices. |
| // This list may change over time, as devices are connected and disconnected. |
| cmd array<DeviceId> GetDevices() { return ? } |
| |
| // GetState returns an identifier to a binary blob containing the graphics state |
| // for the given context immediately following the atom after. |
| // The binary blob can be fetched with a call to ResolveBinary, and decoded |
| // using the capture's schema. |
| cmd BinaryId GetState(CaptureId capture, |
| u32 contextId, |
| u64 after) |
| { return ? } |
| |
| // GetHierarchy returns the atom hierarchy identifier for the given capture and |
| // context. Currently there is only one hierarchy per capture context, but |
| // this is likely to change in the future. |
| cmd HierarchyId GetHierarchy(CaptureId capture, |
| u32 contextId) |
| { return ? } |
| |
| // GetMemoryInfo returns the MemoryInfo identifier describing the memory state |
| // for the given capture, context and range, immediately following the atom |
| // after. |
| cmd MemoryInfoId GetMemoryInfo(CaptureId capture, |
| u32 contextId, |
| u64 after, |
| MemoryRange rng) |
| { return ? } |
| |
| // GetFramebufferColor returns the ImageInfo identifier describing the bound |
| // color buffer for the given device, capture and context immediately following |
| // the atom after. The provided RenderSettings structure can be used to adjust |
| // maximum desired dimensions of the image, as well as applying debug |
| // visualizations. |
| cmd ImageInfoId GetFramebufferColor(DeviceId device, |
| CaptureId capture, |
| u32 contextId, |
| u64 after, |
| RenderSettings settings) |
| { return ? } |
| |
| // GetFramebufferDepth returns the ImageInfo identifier describing the bound |
| // depth buffer for the given device, capture and context immediately following |
| // the atom after. |
| cmd ImageInfoId GetFramebufferDepth(DeviceId device, |
| CaptureId capture, |
| u32 contextId, |
| u64 after) |
| { return ? } |
| |
| // GetGlErrorCodes returns an identifier to a binary blob holding the results of |
| // glGetError after every atom in the given capture and context for the given |
| // device. This function is experimental and will change signature or be removed. |
| cmd BinaryId GetGlErrorCodes(DeviceId device, |
| CaptureId capture, |
| u32 contextId) |
| { return ? } |
| |
| // ReplaceAtom creates and new capture based on an existing capture, but with |
| // a single atom replaced. |
| cmd CaptureId ReplaceAtom(CaptureId capture, |
| u64 atomId, |
| u16 atomType, |
| Binary data) |
| { return ? } |
| |
| // GetTimingInfo performs timings of the given capture, context on the given |
| // device, returning an identifier to the results. This function is experimental |
| // and will change signature. |
| cmd TimingInfoId GetTimingInfo(DeviceId device, |
| CaptureId capture, |
| u32 contextId, |
| TimingMask mask) |
| { return ? } |
| |
| // PrerenderFramebuffers renders the framebuffer contents after each of the |
| // given atoms of interest in the given capture on the given device, resized to |
| // fit within the given dimensions while keeping the respective framebuffers |
| // original aspect ratio. This function doesn't return any data, as it is used |
| // to pre-populate the cache of framebuffer thumbnails that later get queried by |
| // the client. This function is experimental and may change signature. |
| cmd BinaryId PrerenderFramebuffers(DeviceId device, |
| CaptureId capture, |
| u32 width, |
| u32 height, |
| array<u64> atomIds) |
| { return ? } |
| |
| cmd AtomStream ResolveAtomStream(AtomStreamId id) { return ? } |
| cmd Binary ResolveBinary(BinaryId id) { return ? } |
| cmd Capture ResolveCapture(CaptureId id) { return ? } |
| cmd Device ResolveDevice(DeviceId id) { return ? } |
| cmd Hierarchy ResolveHierarchy(HierarchyId id) { return ? } |
| cmd ImageInfo ResolveImageInfo(ImageInfoId id) { return ? } |
| cmd MemoryInfo ResolveMemoryInfo(MemoryInfoId id) { return ? } |
| cmd Schema ResolveSchema(SchemaId id) { return ? } |
| cmd TimingInfo ResolveTimingInfo(TimingInfoId id) { return ? } |
| |
| // Device describes replay target avaliable to the server. |
| class Device { |
| string Name // The name of the device. i.e. "Bob's phone" |
| string Model // The model of the device. i.e. "Nexus 5" |
| string OS // The operating system of the device. i.e. "Android 5.0" |
| u8 PointerSize // Size in bytes of a pointer on the device's architecture. |
| u8 PointerAlignment // Alignment in bytes of a pointer on the device's architecture. |
| u64 MaxMemorySize // The total amount of contiguous memory pre-allocated for replay. |
| bool RequiresShaderPatching // HACK. Will be removed. |
| } |
| |
| // Capture describes single capture file held by the server. |
| class Capture { |
| string Name // Name given to the capture. i.e. "KittyWorld" |
| string API // The name of the API used in the capture. Will be removed. |
| AtomStreamId Atoms // The identifier to the stream of atoms in this capture. |
| array<u32> ContextIds // All context identifiers used by all atoms in the capture. |
| } |
| |
| // Binary holds a blob of data. |
| class Binary { |
| array<u8> Data |
| } |
| |
| // AtomStream holds a stream of atoms in binary form. The atoms can be unpacked |
| // using the schema. |
| class AtomStream { |
| array<u8> Data // Encoded atom stream. |
| SchemaId Schema // Schema used to unpack the atom stream. |
| } |
| |
| // Hierarchy holds the root to an AtomGroup hierarchy. |
| class Hierarchy { |
| AtomGroup Root |
| } |
| |
| // AtomGroup represents a named, contiguous span of atoms with support for |
| // sparse sub-groups. AtomGroups are used for expressing nested hierarchies of |
| // atoms formed from frame boundaries, draw call boundaries and user markers. |
| class AtomGroup { |
| string Name // Name of this group. |
| AtomRange Range // The span of atoms this group covers. |
| array<AtomGroup> SubGroups // The list of sub-groups within this group. |
| } |
| |
| // AtomRange describes a span of atoms in an AtomStream. |
| class AtomRange { |
| u64 First // The index of the first atom in the range. |
| u64 Count // The number of atoms in the range. |
| } |
| |
| // MemoryInfo describes the state of a range of memory at a specific point in |
| // the atom stream. This structure is likely to change in the future. |
| class MemoryInfo { |
| array<u8> Data // The memory values for the span. |
| array<MemoryRange> Stale // The data ranges that have been observed but not current. |
| array<MemoryRange> Current // The data ranges that were written to just before the observation. |
| array<MemoryRange> Unknown // The data ranges that have never been observed. |
| } |
| |
| // MemoryRange describes a range of memory. |
| class MemoryRange { |
| u64 Base // The pointer to the first byte in the memory range. |
| u64 Size // The size in bytes of the memory range. |
| } |
| |
| // ImageInfo describes an image, such as a texture or framebuffer at a specific |
| // point in the atom stream. |
| class ImageInfo { |
| ImageFormat Format // The format of the image. |
| u32 Width // The width of the image in pixels. |
| u32 Height // The height of the image in pixels. |
| BinaryId Data // The pixel data of the image. |
| } |
| |
| // The enumerator of image formats. Will expand. |
| enum ImageFormat { |
| RGBA8 = 0, |
| Float32 = 1, |
| } |
| |
| // TimingMask is a bitfield describing what should be timed. |
| // This is experimental and will change in the near future. |
| bitfield TimingMask { |
| TimingPerCommand = 0x1, // Time individual commands. |
| TimingPerDrawCall = 0x2, // Time each draw call. |
| TimingPerFrame = 0x4, // Time each frame. |
| } |
| |
| // TimingInfo holds the results of a resolved GetTimingInfo request. |
| // This is experimental and will change in the near future. |
| class TimingInfo { |
| array<AtomTimer> PerCommand // The timing results of each command. |
| array<AtomRangeTimer> PerDrawCall // The timing results of each draw call. |
| array<AtomRangeTimer> PerFrame // The timing results of each frame. |
| } |
| |
| // AtomTimer holds the timing information for a single atom. |
| // This is experimental and will change in the near future. |
| class AtomTimer { |
| u64 AtomId // The atom that was timed. |
| u64 Nanoseconds // The time taken for that atom. |
| } |
| |
| // AtomRangeTimer holds the timing information for a range of contiguous atoms. |
| // This is experimental and will change in the near future. |
| class AtomRangeTimer { |
| u64 FromAtomId // The first atom in the range that was timed. |
| u64 ToAtomId // The last atom in the range that was timed. |
| u64 Nanoseconds // The time taken for all atoms in the range. |
| } |
| |
| // RenderSettings contains settings and flags to be used in replaying and |
| // returning a bound render target's color buffer. |
| class RenderSettings { |
| u32 MaxWidth // The desired maximum width of the image. The returned image may be larger than this. |
| u32 MaxHeight // The desired minimum height of the image. The returned image may be larger than this. |
| bool Wireframe // True if the all geometry should be rendered as wireframe. |
| } |
| |
| // The Schema describes all the array, map, enum, struct, class, atom and state |
| // types stored within the AtomStream and state. Clients use the Schema to know |
| // how to interpret these types. |
| class Schema { |
| array<ArrayInfo*> Arrays |
| array<MapInfo*> Maps |
| array<EnumInfo*> Enums |
| array<StructInfo*> Structs |
| array<ClassInfo*> Classes |
| array<AtomInfo> Atoms |
| StructInfo* State |
| } |
| |
| // TypeKind is the exhaustive list of all types supported by the schema. |
| enum TypeKind { |
| // Primative types |
| Bool = 0, |
| S8 = 1, |
| U8 = 2, |
| S16 = 3, |
| U16 = 4, |
| S32 = 5, |
| U32 = 6, |
| F32 = 7, |
| S64 = 8, |
| U64 = 9, |
| F64 = 10, |
| String = 11, |
| Enum = 12, |
| // Complex types |
| Struct = 14, |
| Class = 15, |
| Array = 16, |
| Map = 17, |
| Pointer = 18, |
| Memory = 19, // Currently unimplemented. |
| Any = 20, // Will be removed. |
| } |
| |
| // TypeInfo is the base of all schema defined types. |
| @Interface class TypeInfo { |
| string Name // The name of the type. |
| TypeKind Kind // The kind of the type. |
| } |
| |
| // ArrayInfo describes an array instantiation. |
| class ArrayInfo : TypeInfo { |
| TypeInfo* ElementType // The array's element type. |
| } |
| |
| // MapInfo describes a map instantiation. |
| class MapInfo : TypeInfo { |
| TypeInfo* KeyType // The map's key type. |
| TypeInfo* ValueType // The map's value type. |
| } |
| |
| // EnumInfo describes an enum type. |
| class EnumInfo : TypeInfo { |
| array<EnumEntry> Entries // The list of enum entries. |
| array<EnumInfo*> Extends // The list of enums this enum extends from. Will be removed. |
| } |
| |
| // EnumEntry describes a single name-value entry in an enum. |
| class EnumEntry { |
| string Name // The name of the enum entry. |
| u32 Value // The value of the enum entry. May be extended to u64. |
| } |
| |
| // StructInfo describes the body of a single struct type. |
| class StructInfo : TypeInfo { |
| array<FieldInfo*> Fields // The list of fields in the struct. |
| } |
| |
| // ClassInfo describes the body of a single class type. |
| class ClassInfo : TypeInfo { |
| array<FieldInfo*> Fields // The list of fields in the class. |
| array<ClassInfo*> Extends // The list of classes this enum classes from. Likely to be removed. |
| } |
| |
| // FieldInfo describes a single field entry in a class or struct. |
| class FieldInfo { |
| string Name // The name of the field. |
| TypeInfo* Type // The type of the field. |
| } |
| |
| // AtomInfo describes a single Atom type. |
| class AtomInfo { |
| u16 Type // The atom's unique type identifier. |
| string Name // The name of the atom. |
| array<ParameterInfo> Parameters // The list of atom parameters. |
| bool IsCommand // True if the atom represents an API command. |
| bool IsDrawCall // True if the atom represents a draw call. |
| bool IsEndOfFrame // True if the atom represents the end of a frame. |
| string DocumentationUrl // The URL to the atom's documentation. |
| } |
| |
| // ParameterInfo describes a single Atom parameter. |
| class ParameterInfo { |
| string Name // Name of the parameter. |
| TypeInfo* Type // Type of the parameter. |
| bool Out // True if the parameter is an output. |
| } |
| |
| // SimpleInfo is used for all primative types. |
| class SimpleInfo : TypeInfo {} |