Merge "createSurface getpid() first parameter was removed"
diff --git a/cmds/keystore/Android.mk b/cmds/keystore/Android.mk
deleted file mode 100644
index 5a9b979..0000000
--- a/cmds/keystore/Android.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright (C) 2009 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.
-#
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := keystore.cpp
-LOCAL_C_INCLUDES := external/openssl/include
-LOCAL_SHARED_LIBRARIES := libcutils libcrypto
-LOCAL_MODULE:= keystore
-include $(BUILD_EXECUTABLE)
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := keystore_cli.cpp
-LOCAL_C_INCLUDES := external/openssl/include
-LOCAL_SHARED_LIBRARIES := libcutils libcrypto
-LOCAL_MODULE:= keystore_cli
-LOCAL_MODULE_TAGS := debug
-include $(BUILD_EXECUTABLE)
diff --git a/cmds/keystore/keystore.cpp b/cmds/keystore/keystore.cpp
deleted file mode 100644
index 05f77e5..0000000
--- a/cmds/keystore/keystore.cpp
+++ /dev/null
@@ -1,810 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <unistd.h>
-#include <signal.h>
-#include <errno.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <arpa/inet.h>
-
-#include <openssl/aes.h>
-#include <openssl/evp.h>
-#include <openssl/md5.h>
-
-#define LOG_TAG "keystore"
-#include <cutils/log.h>
-#include <cutils/sockets.h>
-#include <private/android_filesystem_config.h>
-
-#include "keystore.h"
-
-/* KeyStore is a secured storage for key-value pairs. In this implementation,
- * each file stores one key-value pair. Keys are encoded in file names, and
- * values are encrypted with checksums. The encryption key is protected by a
- * user-defined password. To keep things simple, buffers are always larger than
- * the maximum space we needed, so boundary checks on buffers are omitted. */
-
-#define KEY_SIZE ((NAME_MAX - 15) / 2)
-#define VALUE_SIZE 32768
-#define PASSWORD_SIZE VALUE_SIZE
-
-struct Value {
- int length;
- uint8_t value[VALUE_SIZE];
-};
-
-/* Here is the encoding of keys. This is necessary in order to allow arbitrary
- * characters in keys. Characters in [0-~] are not encoded. Others are encoded
- * into two bytes. The first byte is one of [+-.] which represents the first
- * two bits of the character. The second byte encodes the rest of the bits into
- * [0-o]. Therefore in the worst case the length of a key gets doubled. Note
- * that Base64 cannot be used here due to the need of prefix match on keys. */
-
-static int encode_key(char* out, uid_t uid, const Value* key) {
- int n = snprintf(out, NAME_MAX, "%u_", uid);
- out += n;
- const uint8_t* in = key->value;
- int length = key->length;
- for (int i = length; i > 0; --i, ++in, ++out) {
- if (*in >= '0' && *in <= '~') {
- *out = *in;
- } else {
- *out = '+' + (*in >> 6);
- *++out = '0' + (*in & 0x3F);
- ++length;
- }
- }
- *out = '\0';
- return n + length;
-}
-
-static int decode_key(uint8_t* out, char* in, int length) {
- for (int i = 0; i < length; ++i, ++in, ++out) {
- if (*in >= '0' && *in <= '~') {
- *out = *in;
- } else {
- *out = (*in - '+') << 6;
- *out |= (*++in - '0') & 0x3F;
- --length;
- }
- }
- *out = '\0';
- return length;
-}
-
-static size_t readFully(int fd, uint8_t* data, size_t size) {
- size_t remaining = size;
- while (remaining > 0) {
- ssize_t n = TEMP_FAILURE_RETRY(read(fd, data, size));
- if (n == -1 || n == 0) {
- return size-remaining;
- }
- data += n;
- remaining -= n;
- }
- return size;
-}
-
-static size_t writeFully(int fd, uint8_t* data, size_t size) {
- size_t remaining = size;
- while (remaining > 0) {
- ssize_t n = TEMP_FAILURE_RETRY(write(fd, data, size));
- if (n == -1 || n == 0) {
- return size-remaining;
- }
- data += n;
- remaining -= n;
- }
- return size;
-}
-
-class Entropy {
-public:
- Entropy() : mRandom(-1) {}
- ~Entropy() {
- if (mRandom != -1) {
- close(mRandom);
- }
- }
-
- bool open() {
- const char* randomDevice = "/dev/urandom";
- mRandom = ::open(randomDevice, O_RDONLY);
- if (mRandom == -1) {
- ALOGE("open: %s: %s", randomDevice, strerror(errno));
- return false;
- }
- return true;
- }
-
- bool generate_random_data(uint8_t* data, size_t size) {
- return (readFully(mRandom, data, size) == size);
- }
-
-private:
- int mRandom;
-};
-
-/* Here is the file format. There are two parts in blob.value, the secret and
- * the description. The secret is stored in ciphertext, and its original size
- * can be found in blob.length. The description is stored after the secret in
- * plaintext, and its size is specified in blob.info. The total size of the two
- * parts must be no more than VALUE_SIZE bytes. The first three bytes of the
- * file are reserved for future use and are always set to zero. Fields other
- * than blob.info, blob.length, and blob.value are modified by encryptBlob()
- * and decryptBlob(). Thus they should not be accessed from outside. */
-
-struct __attribute__((packed)) blob {
- uint8_t reserved[3];
- uint8_t info;
- uint8_t vector[AES_BLOCK_SIZE];
- uint8_t encrypted[0];
- uint8_t digest[MD5_DIGEST_LENGTH];
- uint8_t digested[0];
- int32_t length; // in network byte order when encrypted
- uint8_t value[VALUE_SIZE + AES_BLOCK_SIZE];
-};
-
-class Blob {
-public:
- Blob(uint8_t* value, int32_t valueLength, uint8_t* info, uint8_t infoLength) {
- mBlob.length = valueLength;
- memcpy(mBlob.value, value, valueLength);
-
- mBlob.info = infoLength;
- memcpy(mBlob.value + valueLength, info, infoLength);
- }
-
- Blob(blob b) {
- mBlob = b;
- }
-
- Blob() {}
-
- uint8_t* getValue() {
- return mBlob.value;
- }
-
- int32_t getLength() {
- return mBlob.length;
- }
-
- uint8_t getInfo() {
- return mBlob.info;
- }
-
- ResponseCode encryptBlob(const char* filename, AES_KEY *aes_key, Entropy* entropy) {
- if (!entropy->generate_random_data(mBlob.vector, AES_BLOCK_SIZE)) {
- return SYSTEM_ERROR;
- }
-
- // data includes the value and the value's length
- size_t dataLength = mBlob.length + sizeof(mBlob.length);
- // pad data to the AES_BLOCK_SIZE
- size_t digestedLength = ((dataLength + AES_BLOCK_SIZE - 1)
- / AES_BLOCK_SIZE * AES_BLOCK_SIZE);
- // encrypted data includes the digest value
- size_t encryptedLength = digestedLength + MD5_DIGEST_LENGTH;
- // move info after space for padding
- memmove(&mBlob.encrypted[encryptedLength], &mBlob.value[mBlob.length], mBlob.info);
- // zero padding area
- memset(mBlob.value + mBlob.length, 0, digestedLength - dataLength);
-
- mBlob.length = htonl(mBlob.length);
- MD5(mBlob.digested, digestedLength, mBlob.digest);
-
- uint8_t vector[AES_BLOCK_SIZE];
- memcpy(vector, mBlob.vector, AES_BLOCK_SIZE);
- AES_cbc_encrypt(mBlob.encrypted, mBlob.encrypted, encryptedLength,
- aes_key, vector, AES_ENCRYPT);
-
- memset(mBlob.reserved, 0, sizeof(mBlob.reserved));
- size_t headerLength = (mBlob.encrypted - (uint8_t*) &mBlob);
- size_t fileLength = encryptedLength + headerLength + mBlob.info;
-
- const char* tmpFileName = ".tmp";
- int out = open(tmpFileName, O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR);
- if (out == -1) {
- return SYSTEM_ERROR;
- }
- size_t writtenBytes = writeFully(out, (uint8_t*) &mBlob, fileLength);
- if (close(out) != 0) {
- return SYSTEM_ERROR;
- }
- if (writtenBytes != fileLength) {
- unlink(tmpFileName);
- return SYSTEM_ERROR;
- }
- return (rename(tmpFileName, filename) == 0) ? NO_ERROR : SYSTEM_ERROR;
- }
-
- ResponseCode decryptBlob(const char* filename, AES_KEY *aes_key) {
- int in = open(filename, O_RDONLY);
- if (in == -1) {
- return (errno == ENOENT) ? KEY_NOT_FOUND : SYSTEM_ERROR;
- }
- // fileLength may be less than sizeof(mBlob) since the in
- // memory version has extra padding to tolerate rounding up to
- // the AES_BLOCK_SIZE
- size_t fileLength = readFully(in, (uint8_t*) &mBlob, sizeof(mBlob));
- if (close(in) != 0) {
- return SYSTEM_ERROR;
- }
- size_t headerLength = (mBlob.encrypted - (uint8_t*) &mBlob);
- if (fileLength < headerLength) {
- return VALUE_CORRUPTED;
- }
-
- ssize_t encryptedLength = fileLength - (headerLength + mBlob.info);
- if (encryptedLength < 0 || encryptedLength % AES_BLOCK_SIZE != 0) {
- return VALUE_CORRUPTED;
- }
- AES_cbc_encrypt(mBlob.encrypted, mBlob.encrypted, encryptedLength, aes_key,
- mBlob.vector, AES_DECRYPT);
- size_t digestedLength = encryptedLength - MD5_DIGEST_LENGTH;
- uint8_t computedDigest[MD5_DIGEST_LENGTH];
- MD5(mBlob.digested, digestedLength, computedDigest);
- if (memcmp(mBlob.digest, computedDigest, MD5_DIGEST_LENGTH) != 0) {
- return VALUE_CORRUPTED;
- }
-
- ssize_t maxValueLength = digestedLength - sizeof(mBlob.length);
- mBlob.length = ntohl(mBlob.length);
- if (mBlob.length < 0 || mBlob.length > maxValueLength) {
- return VALUE_CORRUPTED;
- }
- if (mBlob.info != 0) {
- // move info from after padding to after data
- memmove(&mBlob.value[mBlob.length], &mBlob.value[maxValueLength], mBlob.info);
- }
- return NO_ERROR;
- }
-
-private:
- struct blob mBlob;
-};
-
-class KeyStore {
-public:
- KeyStore(Entropy* entropy) : mEntropy(entropy), mRetry(MAX_RETRY) {
- if (access(MASTER_KEY_FILE, R_OK) == 0) {
- setState(STATE_LOCKED);
- } else {
- setState(STATE_UNINITIALIZED);
- }
- }
-
- State getState() {
- return mState;
- }
-
- int8_t getRetry() {
- return mRetry;
- }
-
- ResponseCode initialize(Value* pw) {
- if (!generateMasterKey()) {
- return SYSTEM_ERROR;
- }
- ResponseCode response = writeMasterKey(pw);
- if (response != NO_ERROR) {
- return response;
- }
- setupMasterKeys();
- return NO_ERROR;
- }
-
- ResponseCode writeMasterKey(Value* pw) {
- uint8_t passwordKey[MASTER_KEY_SIZE_BYTES];
- generateKeyFromPassword(passwordKey, MASTER_KEY_SIZE_BYTES, pw, mSalt);
- AES_KEY passwordAesKey;
- AES_set_encrypt_key(passwordKey, MASTER_KEY_SIZE_BITS, &passwordAesKey);
- Blob masterKeyBlob(mMasterKey, sizeof(mMasterKey), mSalt, sizeof(mSalt));
- return masterKeyBlob.encryptBlob(MASTER_KEY_FILE, &passwordAesKey, mEntropy);
- }
-
- ResponseCode readMasterKey(Value* pw) {
- int in = open(MASTER_KEY_FILE, O_RDONLY);
- if (in == -1) {
- return SYSTEM_ERROR;
- }
-
- // we read the raw blob to just to get the salt to generate
- // the AES key, then we create the Blob to use with decryptBlob
- blob rawBlob;
- size_t length = readFully(in, (uint8_t*) &rawBlob, sizeof(rawBlob));
- if (close(in) != 0) {
- return SYSTEM_ERROR;
- }
- // find salt at EOF if present, otherwise we have an old file
- uint8_t* salt;
- if (length > SALT_SIZE && rawBlob.info == SALT_SIZE) {
- salt = (uint8_t*) &rawBlob + length - SALT_SIZE;
- } else {
- salt = NULL;
- }
- uint8_t passwordKey[MASTER_KEY_SIZE_BYTES];
- generateKeyFromPassword(passwordKey, MASTER_KEY_SIZE_BYTES, pw, salt);
- AES_KEY passwordAesKey;
- AES_set_decrypt_key(passwordKey, MASTER_KEY_SIZE_BITS, &passwordAesKey);
- Blob masterKeyBlob(rawBlob);
- ResponseCode response = masterKeyBlob.decryptBlob(MASTER_KEY_FILE, &passwordAesKey);
- if (response == SYSTEM_ERROR) {
- return SYSTEM_ERROR;
- }
- if (response == NO_ERROR && masterKeyBlob.getLength() == MASTER_KEY_SIZE_BYTES) {
- // if salt was missing, generate one and write a new master key file with the salt.
- if (salt == NULL) {
- if (!generateSalt()) {
- return SYSTEM_ERROR;
- }
- response = writeMasterKey(pw);
- }
- if (response == NO_ERROR) {
- memcpy(mMasterKey, masterKeyBlob.getValue(), MASTER_KEY_SIZE_BYTES);
- setupMasterKeys();
- }
- return response;
- }
- if (mRetry <= 0) {
- reset();
- return UNINITIALIZED;
- }
- --mRetry;
- switch (mRetry) {
- case 0: return WRONG_PASSWORD_0;
- case 1: return WRONG_PASSWORD_1;
- case 2: return WRONG_PASSWORD_2;
- case 3: return WRONG_PASSWORD_3;
- default: return WRONG_PASSWORD_3;
- }
- }
-
- bool reset() {
- clearMasterKeys();
- setState(STATE_UNINITIALIZED);
-
- DIR* dir = opendir(".");
- struct dirent* file;
-
- if (!dir) {
- return false;
- }
- while ((file = readdir(dir)) != NULL) {
- unlink(file->d_name);
- }
- closedir(dir);
- return true;
- }
-
- bool isEmpty() {
- DIR* dir = opendir(".");
- struct dirent* file;
- if (!dir) {
- return true;
- }
- bool result = true;
- while ((file = readdir(dir)) != NULL) {
- if (isKeyFile(file->d_name)) {
- result = false;
- break;
- }
- }
- closedir(dir);
- return result;
- }
-
- void lock() {
- clearMasterKeys();
- setState(STATE_LOCKED);
- }
-
- ResponseCode get(const char* filename, Blob* keyBlob) {
- return keyBlob->decryptBlob(filename, &mMasterKeyDecryption);
- }
-
- ResponseCode put(const char* filename, Blob* keyBlob) {
- return keyBlob->encryptBlob(filename, &mMasterKeyEncryption, mEntropy);
- }
-
-private:
- static const char* MASTER_KEY_FILE;
- static const int MASTER_KEY_SIZE_BYTES = 16;
- static const int MASTER_KEY_SIZE_BITS = MASTER_KEY_SIZE_BYTES * 8;
-
- static const int MAX_RETRY = 4;
- static const size_t SALT_SIZE = 16;
-
- Entropy* mEntropy;
-
- State mState;
- int8_t mRetry;
-
- uint8_t mMasterKey[MASTER_KEY_SIZE_BYTES];
- uint8_t mSalt[SALT_SIZE];
-
- AES_KEY mMasterKeyEncryption;
- AES_KEY mMasterKeyDecryption;
-
- void setState(State state) {
- mState = state;
- if (mState == STATE_NO_ERROR || mState == STATE_UNINITIALIZED) {
- mRetry = MAX_RETRY;
- }
- }
-
- bool generateSalt() {
- return mEntropy->generate_random_data(mSalt, sizeof(mSalt));
- }
-
- bool generateMasterKey() {
- if (!mEntropy->generate_random_data(mMasterKey, sizeof(mMasterKey))) {
- return false;
- }
- if (!generateSalt()) {
- return false;
- }
- return true;
- }
-
- void setupMasterKeys() {
- AES_set_encrypt_key(mMasterKey, MASTER_KEY_SIZE_BITS, &mMasterKeyEncryption);
- AES_set_decrypt_key(mMasterKey, MASTER_KEY_SIZE_BITS, &mMasterKeyDecryption);
- setState(STATE_NO_ERROR);
- }
-
- void clearMasterKeys() {
- memset(mMasterKey, 0, sizeof(mMasterKey));
- memset(mSalt, 0, sizeof(mSalt));
- memset(&mMasterKeyEncryption, 0, sizeof(mMasterKeyEncryption));
- memset(&mMasterKeyDecryption, 0, sizeof(mMasterKeyDecryption));
- }
-
- static void generateKeyFromPassword(uint8_t* key, ssize_t keySize, Value* pw, uint8_t* salt) {
- size_t saltSize;
- if (salt != NULL) {
- saltSize = SALT_SIZE;
- } else {
- // pre-gingerbread used this hardwired salt, readMasterKey will rewrite these when found
- salt = (uint8_t*) "keystore";
- // sizeof = 9, not strlen = 8
- saltSize = sizeof("keystore");
- }
- PKCS5_PBKDF2_HMAC_SHA1((char*) pw->value, pw->length, salt, saltSize, 8192, keySize, key);
- }
-
- static bool isKeyFile(const char* filename) {
- return ((strcmp(filename, MASTER_KEY_FILE) != 0)
- && (strcmp(filename, ".") != 0)
- && (strcmp(filename, "..") != 0));
- }
-};
-
-const char* KeyStore::MASTER_KEY_FILE = ".masterkey";
-
-/* Here is the protocol used in both requests and responses:
- * code [length_1 message_1 ... length_n message_n] end-of-file
- * where code is one byte long and lengths are unsigned 16-bit integers in
- * network order. Thus the maximum length of a message is 65535 bytes. */
-
-static int recv_code(int sock, int8_t* code) {
- return recv(sock, code, 1, 0) == 1;
-}
-
-static int recv_message(int sock, uint8_t* message, int length) {
- uint8_t bytes[2];
- if (recv(sock, &bytes[0], 1, 0) != 1 ||
- recv(sock, &bytes[1], 1, 0) != 1) {
- return -1;
- } else {
- int offset = bytes[0] << 8 | bytes[1];
- if (length < offset) {
- return -1;
- }
- length = offset;
- offset = 0;
- while (offset < length) {
- int n = recv(sock, &message[offset], length - offset, 0);
- if (n <= 0) {
- return -1;
- }
- offset += n;
- }
- }
- return length;
-}
-
-static int recv_end_of_file(int sock) {
- uint8_t byte;
- return recv(sock, &byte, 1, 0) == 0;
-}
-
-static void send_code(int sock, int8_t code) {
- send(sock, &code, 1, 0);
-}
-
-static void send_message(int sock, uint8_t* message, int length) {
- uint16_t bytes = htons(length);
- send(sock, &bytes, 2, 0);
- send(sock, message, length, 0);
-}
-
-/* Here are the actions. Each of them is a function without arguments. All
- * information is defined in global variables, which are set properly before
- * performing an action. The number of parameters required by each action is
- * fixed and defined in a table. If the return value of an action is positive,
- * it will be treated as a response code and transmitted to the client. Note
- * that the lengths of parameters are checked when they are received, so
- * boundary checks on parameters are omitted. */
-
-static const ResponseCode NO_ERROR_RESPONSE_CODE_SENT = (ResponseCode) 0;
-
-static ResponseCode test(KeyStore* keyStore, int sock, uid_t uid, Value*, Value*) {
- return (ResponseCode) keyStore->getState();
-}
-
-static ResponseCode get(KeyStore* keyStore, int sock, uid_t uid, Value* keyName, Value*) {
- char filename[NAME_MAX];
- encode_key(filename, uid, keyName);
- Blob keyBlob;
- ResponseCode responseCode = keyStore->get(filename, &keyBlob);
- if (responseCode != NO_ERROR) {
- return responseCode;
- }
- send_code(sock, NO_ERROR);
- send_message(sock, keyBlob.getValue(), keyBlob.getLength());
- return NO_ERROR_RESPONSE_CODE_SENT;
-}
-
-static ResponseCode insert(KeyStore* keyStore, int sock, uid_t uid, Value* keyName, Value* val) {
- char filename[NAME_MAX];
- encode_key(filename, uid, keyName);
- Blob keyBlob(val->value, val->length, 0, NULL);
- return keyStore->put(filename, &keyBlob);
-}
-
-static ResponseCode del(KeyStore* keyStore, int sock, uid_t uid, Value* keyName, Value*) {
- char filename[NAME_MAX];
- encode_key(filename, uid, keyName);
- return (unlink(filename) && errno != ENOENT) ? SYSTEM_ERROR : NO_ERROR;
-}
-
-static ResponseCode exist(KeyStore* keyStore, int sock, uid_t uid, Value* keyName, Value*) {
- char filename[NAME_MAX];
- encode_key(filename, uid, keyName);
- if (access(filename, R_OK) == -1) {
- return (errno != ENOENT) ? SYSTEM_ERROR : KEY_NOT_FOUND;
- }
- return NO_ERROR;
-}
-
-static ResponseCode saw(KeyStore* keyStore, int sock, uid_t uid, Value* keyPrefix, Value*) {
- DIR* dir = opendir(".");
- if (!dir) {
- return SYSTEM_ERROR;
- }
- char filename[NAME_MAX];
- int n = encode_key(filename, uid, keyPrefix);
- send_code(sock, NO_ERROR);
-
- struct dirent* file;
- while ((file = readdir(dir)) != NULL) {
- if (!strncmp(filename, file->d_name, n)) {
- char* p = &file->d_name[n];
- keyPrefix->length = decode_key(keyPrefix->value, p, strlen(p));
- send_message(sock, keyPrefix->value, keyPrefix->length);
- }
- }
- closedir(dir);
- return NO_ERROR_RESPONSE_CODE_SENT;
-}
-
-static ResponseCode reset(KeyStore* keyStore, int sock, uid_t uid, Value*, Value*) {
- return keyStore->reset() ? NO_ERROR : SYSTEM_ERROR;
-}
-
-/* Here is the history. To improve the security, the parameters to generate the
- * master key has been changed. To make a seamless transition, we update the
- * file using the same password when the user unlock it for the first time. If
- * any thing goes wrong during the transition, the new file will not overwrite
- * the old one. This avoids permanent damages of the existing data. */
-
-static ResponseCode password(KeyStore* keyStore, int sock, uid_t uid, Value* pw, Value*) {
- switch (keyStore->getState()) {
- case STATE_UNINITIALIZED: {
- // generate master key, encrypt with password, write to file, initialize mMasterKey*.
- return keyStore->initialize(pw);
- }
- case STATE_NO_ERROR: {
- // rewrite master key with new password.
- return keyStore->writeMasterKey(pw);
- }
- case STATE_LOCKED: {
- // read master key, decrypt with password, initialize mMasterKey*.
- return keyStore->readMasterKey(pw);
- }
- }
- return SYSTEM_ERROR;
-}
-
-static ResponseCode lock(KeyStore* keyStore, int sock, uid_t uid, Value*, Value*) {
- keyStore->lock();
- return NO_ERROR;
-}
-
-static ResponseCode unlock(KeyStore* keyStore, int sock, uid_t uid, Value* pw, Value* unused) {
- return password(keyStore, sock, uid, pw, unused);
-}
-
-static ResponseCode zero(KeyStore* keyStore, int sock, uid_t uid, Value*, Value*) {
- return keyStore->isEmpty() ? KEY_NOT_FOUND : NO_ERROR;
-}
-
-/* Here are the permissions, actions, users, and the main function. */
-
-enum perm {
- TEST = 1,
- GET = 2,
- INSERT = 4,
- DELETE = 8,
- EXIST = 16,
- SAW = 32,
- RESET = 64,
- PASSWORD = 128,
- LOCK = 256,
- UNLOCK = 512,
- ZERO = 1024,
-};
-
-static const int MAX_PARAM = 2;
-
-static const State STATE_ANY = (State) 0;
-
-static struct action {
- ResponseCode (*run)(KeyStore* keyStore, int sock, uid_t uid, Value* param1, Value* param2);
- int8_t code;
- State state;
- uint32_t perm;
- int lengths[MAX_PARAM];
-} actions[] = {
- {test, 't', STATE_ANY, TEST, {0, 0}},
- {get, 'g', STATE_NO_ERROR, GET, {KEY_SIZE, 0}},
- {insert, 'i', STATE_NO_ERROR, INSERT, {KEY_SIZE, VALUE_SIZE}},
- {del, 'd', STATE_ANY, DELETE, {KEY_SIZE, 0}},
- {exist, 'e', STATE_ANY, EXIST, {KEY_SIZE, 0}},
- {saw, 's', STATE_ANY, SAW, {KEY_SIZE, 0}},
- {reset, 'r', STATE_ANY, RESET, {0, 0}},
- {password, 'p', STATE_ANY, PASSWORD, {PASSWORD_SIZE, 0}},
- {lock, 'l', STATE_NO_ERROR, LOCK, {0, 0}},
- {unlock, 'u', STATE_LOCKED, UNLOCK, {PASSWORD_SIZE, 0}},
- {zero, 'z', STATE_ANY, ZERO, {0, 0}},
- {NULL, 0 , STATE_ANY, 0, {0, 0}},
-};
-
-static struct user {
- uid_t uid;
- uid_t euid;
- uint32_t perms;
-} users[] = {
- {AID_SYSTEM, ~0, ~0},
- {AID_VPN, AID_SYSTEM, GET},
- {AID_WIFI, AID_SYSTEM, GET},
- {AID_ROOT, AID_SYSTEM, GET},
- {~0, ~0, TEST | GET | INSERT | DELETE | EXIST | SAW},
-};
-
-static ResponseCode process(KeyStore* keyStore, int sock, uid_t uid, int8_t code) {
- struct user* user = users;
- struct action* action = actions;
- int i;
-
- while (~user->uid && user->uid != uid) {
- ++user;
- }
- while (action->code && action->code != code) {
- ++action;
- }
- if (!action->code) {
- return UNDEFINED_ACTION;
- }
- if (!(action->perm & user->perms)) {
- return PERMISSION_DENIED;
- }
- if (action->state != STATE_ANY && action->state != keyStore->getState()) {
- return (ResponseCode) keyStore->getState();
- }
- if (~user->euid) {
- uid = user->euid;
- }
- Value params[MAX_PARAM];
- for (i = 0; i < MAX_PARAM && action->lengths[i] != 0; ++i) {
- params[i].length = recv_message(sock, params[i].value, action->lengths[i]);
- if (params[i].length < 0) {
- return PROTOCOL_ERROR;
- }
- }
- if (!recv_end_of_file(sock)) {
- return PROTOCOL_ERROR;
- }
- return action->run(keyStore, sock, uid, ¶ms[0], ¶ms[1]);
-}
-
-int main(int argc, char* argv[]) {
- int controlSocket = android_get_control_socket("keystore");
- if (argc < 2) {
- ALOGE("A directory must be specified!");
- return 1;
- }
- if (chdir(argv[1]) == -1) {
- ALOGE("chdir: %s: %s", argv[1], strerror(errno));
- return 1;
- }
-
- Entropy entropy;
- if (!entropy.open()) {
- return 1;
- }
- if (listen(controlSocket, 3) == -1) {
- ALOGE("listen: %s", strerror(errno));
- return 1;
- }
-
- signal(SIGPIPE, SIG_IGN);
-
- KeyStore keyStore(&entropy);
- int sock;
- while ((sock = accept(controlSocket, NULL, 0)) != -1) {
- struct timeval tv;
- tv.tv_sec = 3;
- setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
- setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));
-
- struct ucred cred;
- socklen_t size = sizeof(cred);
- int credResult = getsockopt(sock, SOL_SOCKET, SO_PEERCRED, &cred, &size);
- if (credResult != 0) {
- ALOGW("getsockopt: %s", strerror(errno));
- } else {
- int8_t request;
- if (recv_code(sock, &request)) {
- State old_state = keyStore.getState();
- ResponseCode response = process(&keyStore, sock, cred.uid, request);
- if (response == NO_ERROR_RESPONSE_CODE_SENT) {
- response = NO_ERROR;
- } else {
- send_code(sock, response);
- }
- ALOGI("uid: %d action: %c -> %d state: %d -> %d retry: %d",
- cred.uid,
- request, response,
- old_state, keyStore.getState(),
- keyStore.getRetry());
- }
- }
- close(sock);
- }
- ALOGE("accept: %s", strerror(errno));
- return 1;
-}
diff --git a/cmds/keystore/keystore.h b/cmds/keystore/keystore.h
deleted file mode 100644
index 5ae3d24..0000000
--- a/cmds/keystore/keystore.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-#ifndef __KEYSTORE_H__
-#define __KEYSTORE_H__
-
-// note state values overlap with ResponseCode for the purposes of the state() API
-enum State {
- STATE_NO_ERROR = 1,
- STATE_LOCKED = 2,
- STATE_UNINITIALIZED = 3,
-};
-
-enum ResponseCode {
- NO_ERROR = STATE_NO_ERROR, // 1
- LOCKED = STATE_LOCKED, // 2
- UNINITIALIZED = STATE_UNINITIALIZED, // 3
- SYSTEM_ERROR = 4,
- PROTOCOL_ERROR = 5,
- PERMISSION_DENIED = 6,
- KEY_NOT_FOUND = 7,
- VALUE_CORRUPTED = 8,
- UNDEFINED_ACTION = 9,
- WRONG_PASSWORD_0 = 10,
- WRONG_PASSWORD_1 = 11,
- WRONG_PASSWORD_2 = 12,
- WRONG_PASSWORD_3 = 13, // MAX_RETRY = 4
-};
-
-#endif
diff --git a/cmds/keystore/keystore_cli.cpp b/cmds/keystore/keystore_cli.cpp
deleted file mode 100644
index dcd3bcb..0000000
--- a/cmds/keystore/keystore_cli.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <cutils/sockets.h>
-
-#include "keystore.h"
-
-static const char* responses[] = {
- NULL,
- /* [NO_ERROR] = */ "No error",
- /* [LOCKED] = */ "Locked",
- /* [UNINITIALIZED] = */ "Uninitialized",
- /* [SYSTEM_ERROR] = */ "System error",
- /* [PROTOCOL_ERROR] = */ "Protocol error",
- /* [PERMISSION_DENIED] = */ "Permission denied",
- /* [KEY_NOT_FOUND] = */ "Key not found",
- /* [VALUE_CORRUPTED] = */ "Value corrupted",
- /* [UNDEFINED_ACTION] = */ "Undefined action",
- /* [WRONG_PASSWORD] = */ "Wrong password (last chance)",
- /* [WRONG_PASSWORD + 1] = */ "Wrong password (2 tries left)",
- /* [WRONG_PASSWORD + 2] = */ "Wrong password (3 tries left)",
- /* [WRONG_PASSWORD + 3] = */ "Wrong password (4 tries left)",
-};
-
-int main(int argc, char* argv[])
-{
- if (argc < 2) {
- printf("Usage: %s action [parameter ...]\n", argv[0]);
- return 0;
- }
-
- int sock = socket_local_client("keystore", ANDROID_SOCKET_NAMESPACE_RESERVED,
- SOCK_STREAM);
- if (sock == -1) {
- puts("Failed to connect");
- return 1;
- }
-
- send(sock, argv[1], 1, 0);
- uint8_t bytes[65536];
- for (int i = 2; i < argc; ++i) {
- uint16_t length = strlen(argv[i]);
- bytes[0] = length >> 8;
- bytes[1] = length;
- send(sock, &bytes, 2, 0);
- send(sock, argv[i], length, 0);
- }
- shutdown(sock, SHUT_WR);
-
- uint8_t code;
- if (recv(sock, &code, 1, 0) != 1) {
- puts("Failed to receive");
- return 1;
- }
- printf("%d %s\n", code , responses[code] ? responses[code] : "Unknown");
- int i;
- while ((i = recv(sock, &bytes[0], 1, 0)) == 1) {
- int length;
- int offset;
- if ((i = recv(sock, &bytes[1], 1, 0)) != 1) {
- puts("Failed to receive");
- return 1;
- }
- length = bytes[0] << 8 | bytes[1];
- for (offset = 0; offset < length; offset += i) {
- i = recv(sock, &bytes[offset], length - offset, 0);
- if (i <= 0) {
- puts("Failed to receive");
- return 1;
- }
- }
- fwrite(bytes, 1, length, stdout);
- puts("");
- }
- return 0;
-}
diff --git a/cmds/keystore/keystore_get.h b/cmds/keystore/keystore_get.h
deleted file mode 100644
index 4b4923e..0000000
--- a/cmds/keystore/keystore_get.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-#ifndef __KEYSTORE_GET_H__
-#define __KEYSTORE_GET_H__
-
-#include <stdio.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <cutils/sockets.h>
-
-#define KEYSTORE_MESSAGE_SIZE 65535
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* This function is provided for native components to get values from keystore.
- * Users are required to link against libcutils. Keys and values are 8-bit safe.
- * The first two arguments are the key and its length. The third argument
- * specifies the buffer to store the retrieved value, which must be an array of
- * KEYSTORE_MESSAGE_SIZE bytes. This function returns the length of the value or
- * -1 if an error happens. */
-static int keystore_get(const char *key, int length, char *value)
-{
- uint8_t bytes[2] = {length >> 8, length};
- uint8_t code = 'g';
- int sock;
-
- if (length < 0 || length > KEYSTORE_MESSAGE_SIZE) {
- return -1;
- }
- sock = socket_local_client("keystore", ANDROID_SOCKET_NAMESPACE_RESERVED,
- SOCK_STREAM);
- if (sock == -1) {
- return -1;
- }
- if (send(sock, &code, 1, 0) == 1 && send(sock, bytes, 2, 0) == 2 &&
- send(sock, key, length, 0) == length && shutdown(sock, SHUT_WR) == 0 &&
- recv(sock, &code, 1, 0) == 1 && code == /* NO_ERROR */ 1 &&
- recv(sock, &bytes[0], 1, 0) == 1 && recv(sock, &bytes[1], 1, 0) == 1) {
- int offset = 0;
- length = bytes[0] << 8 | bytes[1];
- while (offset < length) {
- int n = recv(sock, &value[offset], length - offset, 0);
- if (n <= 0) {
- length = -1;
- break;
- }
- offset += n;
- }
- } else {
- length = -1;
- }
-
- close(sock);
- return length;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/cmds/keystore/test-keystore b/cmds/keystore/test-keystore
deleted file mode 100755
index 3be51b3..0000000
--- a/cmds/keystore/test-keystore
+++ /dev/null
@@ -1,273 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2011, 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.
-
-set -e
-
-prefix=$0
-log_file=$prefix.log
-baseline_file=$prefix.baseline
-
-function cleanup_output() {
- rm -f $log_file
- rm -f $baseline_file
-}
-
-function log() {
- echo "$@"
- append $log_file \# "$@"
- append $baseline_file \# "$@"
-}
-
-function expect() {
- append $baseline_file "$@"
-}
-
-function append() {
- declare -r file=$1
- shift
- echo "$@" >> $file
-}
-
-function run() {
- # strip out carriage returns from adb
- # strip out date/time from ls -l
- "$@" | tr --delete '\r' | sed -E 's/[0-9]{4}-[0-9]{2}-[0-9]{2} +[0-9]{1,2}:[0-9]{2} //' >> $log_file
-}
-
-function keystore() {
- declare -r user=$1
- shift
- run adb shell su $user keystore_cli "$@"
-}
-
-function list_keystore_directory() {
- run adb shell ls -al /data/misc/keystore
-}
-
-function compare() {
- log "comparing $baseline_file and $log_file"
- diff $baseline_file $log_file || (log $tag FAILED && exit 1)
-}
-
-function test_basic() {
-
- #
- # reset
- #
- log "reset keystore as system user"
- keystore system r
- expect "1 No error"
- list_keystore_directory
-
- #
- # basic tests as system/root
- #
- log "root does not have permission to run test"
- keystore root t
- expect "6 Permission denied"
-
- log "but system user does"
- keystore system t
- expect "3 Uninitialized"
- list_keystore_directory
-
- log "password is now bar"
- keystore system p bar
- expect "1 No error"
- list_keystore_directory
- expect "-rw------- keystore keystore 84 .masterkey"
-
- log "no error implies initialized and unlocked"
- keystore system t
- expect "1 No error"
-
- log "saw with no argument"
- keystore system s
- expect "5 Protocol error"
-
- log "saw nothing"
- keystore system s ""
- expect "1 No error"
-
- log "add key baz"
- keystore system i baz quux
- expect "1 No error"
-
- log "1000 is uid of system"
- list_keystore_directory
- expect "-rw------- keystore keystore 84 .masterkey"
- expect "-rw------- keystore keystore 52 1000_baz"
-
- log "saw baz"
- keystore system s ""
- expect "1 No error"
- expect "baz"
-
- log "get baz"
- keystore system g baz
- expect "1 No error"
- expect "quux"
-
- log "root can read system user keys (as can wifi or vpn users)"
- keystore root g baz
- expect "1 No error"
- expect "quux"
-
- #
- # app user tests
- #
-
- # app_0 has uid 10000, as seen below
- log "other uses cannot see the system keys"
- keystore app_0 g baz
- expect "7 Key not found"
-
- log "app user cannot use reset, password, lock, unlock"
- keystore app_0 r
- expect "6 Permission denied"
- keystore app_0 p
- expect "6 Permission denied"
- keystore app_0 l
- expect "6 Permission denied"
- keystore app_0 u
- expect "6 Permission denied"
-
- log "install app_0 key"
- keystore app_0 i 0x deadbeef
- expect 1 No error
- list_keystore_directory
- expect "-rw------- keystore keystore 84 .masterkey"
- expect "-rw------- keystore keystore 52 10000_0x"
- expect "-rw------- keystore keystore 52 1000_baz"
-
- log "get with no argument"
- keystore app_0 g
- expect "5 Protocol error"
-
- keystore app_0 g 0x
- expect "1 No error"
- expect "deadbeef"
-
- keystore app_0 i fred barney
- expect "1 No error"
-
- keystore app_0 s ""
- expect "1 No error"
- expect "0x"
- expect "fred"
-
- log "note that saw returns the suffix of prefix matches"
- keystore app_0 s fr # fred
- expect "1 No error"
- expect "ed" # fred
-
- #
- # lock tests
- #
- log "lock the store as system"
- keystore system l
- expect "1 No error"
- keystore system t
- expect "2 Locked"
-
- log "saw works while locked"
- keystore app_0 s ""
- expect "1 No error"
- expect "0x"
- expect "fred"
-
- log "...but cannot read keys..."
- keystore app_0 g 0x
- expect "2 Locked"
-
- log "...but they can be deleted."
- keystore app_0 e 0x
- expect "1 No error"
- keystore app_0 d 0x
- expect "1 No error"
- keystore app_0 e 0x
- expect "7 Key not found"
-
- #
- # password
- #
- log "wrong password"
- keystore system u foo
- expect "13 Wrong password (4 tries left)"
- log "right password"
- keystore system u bar
- expect "1 No error"
-
- log "make the password foo"
- keystore system p foo
- expect "1 No error"
-
- #
- # final reset
- #
- log "reset wipes everything for all users"
- keystore system r
- expect "1 No error"
- list_keystore_directory
-
- keystore system t
- expect "3 Uninitialized"
-
-}
-
-function test_4599735() {
- # http://b/4599735
- log "start regression test for b/4599735"
- keystore system r
- expect "1 No error"
-
- keystore system p foo
- expect "1 No error"
-
- keystore system i baz quux
- expect "1 No error"
-
- keystore root g baz
- expect "1 No error"
- expect "quux"
-
- keystore system l
- expect "1 No error"
-
- keystore system p foo
- expect "1 No error"
-
- log "after unlock, regression led to result of '8 Value corrupted'"
- keystore root g baz
- expect "1 No error"
- expect "quux"
-
- keystore system r
- expect "1 No error"
- log "end regression test for b/4599735"
-}
-
-function main() {
- cleanup_output
- log $tag START
- test_basic
- test_4599735
- compare
- log $tag PASSED
- cleanup_output
-}
-
-main
diff --git a/cmds/surfaceflinger/main_surfaceflinger.cpp b/cmds/surfaceflinger/main_surfaceflinger.cpp
index 78b1007..6dbcf5c 100644
--- a/cmds/surfaceflinger/main_surfaceflinger.cpp
+++ b/cmds/surfaceflinger/main_surfaceflinger.cpp
@@ -20,6 +20,6 @@
using namespace android;
int main(int argc, char** argv) {
- SurfaceFlinger::publishAndJoinThreadPool();
+ SurfaceFlinger::publishAndJoinThreadPool(true);
return 0;
}
diff --git a/include/binder/BinderService.h b/include/binder/BinderService.h
index 2316fef..ca594d3 100644
--- a/include/binder/BinderService.h
+++ b/include/binder/BinderService.h
@@ -34,15 +34,15 @@
class BinderService
{
public:
- static status_t publish() {
+ static status_t publish(bool allowIsolated = false) {
sp<IServiceManager> sm(defaultServiceManager());
- return sm->addService(String16(SERVICE::getServiceName()), new SERVICE());
+ return sm->addService(String16(SERVICE::getServiceName()), new SERVICE(), allowIsolated);
}
- static void publishAndJoinThreadPool() {
+ static void publishAndJoinThreadPool(bool allowIsolated = false) {
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm(defaultServiceManager());
- sm->addService(String16(SERVICE::getServiceName()), new SERVICE());
+ sm->addService(String16(SERVICE::getServiceName()), new SERVICE(), allowIsolated);
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
}
diff --git a/include/binder/IServiceManager.h b/include/binder/IServiceManager.h
index 24e9e99..2c297d6 100644
--- a/include/binder/IServiceManager.h
+++ b/include/binder/IServiceManager.h
@@ -47,7 +47,8 @@
* Register a service.
*/
virtual status_t addService( const String16& name,
- const sp<IBinder>& service) = 0;
+ const sp<IBinder>& service,
+ bool allowIsolated = false) = 0;
/**
* Return list of all existing services.
diff --git a/include/gui/BufferQueue.h b/include/gui/BufferQueue.h
index 991a181..ae99160 100644
--- a/include/gui/BufferQueue.h
+++ b/include/gui/BufferQueue.h
@@ -60,6 +60,8 @@
BufferQueue(bool allowSynchronousMode = true);
virtual ~BufferQueue();
+ virtual int query(int what, int* value);
+
// setBufferCount updates the number of available buffer slots. After
// calling this all buffer slots are both unallocated and owned by the
// BufferQueue object (i.e. they are not owned by the client).
diff --git a/include/gui/SurfaceTexture.h b/include/gui/SurfaceTexture.h
index 4318f0f..dcab049 100644
--- a/include/gui/SurfaceTexture.h
+++ b/include/gui/SurfaceTexture.h
@@ -55,7 +55,7 @@
virtual ~SurfaceTexture();
- virtual int query(int what, int* value);
+
// updateTexImage sets the image contents of the target texture to that of
// the most recently queued buffer.
diff --git a/include/ui/Input.h b/include/ui/Input.h
deleted file mode 100644
index c2cbe1d..0000000
--- a/include/ui/Input.h
+++ /dev/null
@@ -1,897 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#ifndef _UI_INPUT_H
-#define _UI_INPUT_H
-
-/**
- * Native input event structures.
- */
-
-#include <android/input.h>
-#include <utils/Vector.h>
-#include <utils/KeyedVector.h>
-#include <utils/Timers.h>
-#include <utils/RefBase.h>
-#include <utils/String8.h>
-#include <utils/BitSet.h>
-
-#ifdef HAVE_ANDROID_OS
-class SkMatrix;
-#endif
-
-/*
- * Additional private constants not defined in ndk/ui/input.h.
- */
-enum {
- /* Private control to determine when an app is tracking a key sequence. */
- AKEY_EVENT_FLAG_START_TRACKING = 0x40000000,
-
- /* Key event is inconsistent with previously sent key events. */
- AKEY_EVENT_FLAG_TAINTED = 0x80000000,
-};
-
-enum {
- /* Motion event is inconsistent with previously sent motion events. */
- AMOTION_EVENT_FLAG_TAINTED = 0x80000000,
-};
-
-enum {
- /*
- * Indicates that an input device has switches.
- * This input source flag is hidden from the API because switches are only used by the system
- * and applications have no way to interact with them.
- */
- AINPUT_SOURCE_SWITCH = 0x80000000,
-};
-
-/*
- * SystemUiVisibility constants from View.
- */
-enum {
- ASYSTEM_UI_VISIBILITY_STATUS_BAR_VISIBLE = 0,
- ASYSTEM_UI_VISIBILITY_STATUS_BAR_HIDDEN = 0x00000001,
-};
-
-/*
- * Maximum number of pointers supported per motion event.
- * Smallest number of pointers is 1.
- * (We want at least 10 but some touch controllers obstensibly configured for 10 pointers
- * will occasionally emit 11. There is not much harm making this constant bigger.)
- */
-#define MAX_POINTERS 16
-
-/*
- * Maximum pointer id value supported in a motion event.
- * Smallest pointer id is 0.
- * (This is limited by our use of BitSet32 to track pointer assignments.)
- */
-#define MAX_POINTER_ID 31
-
-/*
- * Declare a concrete type for the NDK's input event forward declaration.
- */
-struct AInputEvent {
- virtual ~AInputEvent() { }
-};
-
-/*
- * Declare a concrete type for the NDK's input device forward declaration.
- */
-struct AInputDevice {
- virtual ~AInputDevice() { }
-};
-
-
-namespace android {
-
-#ifdef HAVE_ANDROID_OS
-class Parcel;
-#endif
-
-/*
- * Flags that flow alongside events in the input dispatch system to help with certain
- * policy decisions such as waking from device sleep.
- *
- * These flags are also defined in frameworks/base/core/java/android/view/WindowManagerPolicy.java.
- */
-enum {
- /* These flags originate in RawEvents and are generally set in the key map.
- * NOTE: If you edit these flags, also edit labels in KeycodeLabels.h. */
-
- POLICY_FLAG_WAKE = 0x00000001,
- POLICY_FLAG_WAKE_DROPPED = 0x00000002,
- POLICY_FLAG_SHIFT = 0x00000004,
- POLICY_FLAG_CAPS_LOCK = 0x00000008,
- POLICY_FLAG_ALT = 0x00000010,
- POLICY_FLAG_ALT_GR = 0x00000020,
- POLICY_FLAG_MENU = 0x00000040,
- POLICY_FLAG_LAUNCHER = 0x00000080,
- POLICY_FLAG_VIRTUAL = 0x00000100,
- POLICY_FLAG_FUNCTION = 0x00000200,
-
- POLICY_FLAG_RAW_MASK = 0x0000ffff,
-
- /* These flags are set by the input dispatcher. */
-
- // Indicates that the input event was injected.
- POLICY_FLAG_INJECTED = 0x01000000,
-
- // Indicates that the input event is from a trusted source such as a directly attached
- // input device or an application with system-wide event injection permission.
- POLICY_FLAG_TRUSTED = 0x02000000,
-
- // Indicates that the input event has passed through an input filter.
- POLICY_FLAG_FILTERED = 0x04000000,
-
- // Disables automatic key repeating behavior.
- POLICY_FLAG_DISABLE_KEY_REPEAT = 0x08000000,
-
- /* These flags are set by the input reader policy as it intercepts each event. */
-
- // Indicates that the screen was off when the event was received and the event
- // should wake the device.
- POLICY_FLAG_WOKE_HERE = 0x10000000,
-
- // Indicates that the screen was dim when the event was received and the event
- // should brighten the device.
- POLICY_FLAG_BRIGHT_HERE = 0x20000000,
-
- // Indicates that the event should be dispatched to applications.
- // The input event should still be sent to the InputDispatcher so that it can see all
- // input events received include those that it will not deliver.
- POLICY_FLAG_PASS_TO_USER = 0x40000000,
-};
-
-/*
- * Describes the basic configuration of input devices that are present.
- */
-struct InputConfiguration {
- enum {
- TOUCHSCREEN_UNDEFINED = 0,
- TOUCHSCREEN_NOTOUCH = 1,
- TOUCHSCREEN_STYLUS = 2,
- TOUCHSCREEN_FINGER = 3
- };
-
- enum {
- KEYBOARD_UNDEFINED = 0,
- KEYBOARD_NOKEYS = 1,
- KEYBOARD_QWERTY = 2,
- KEYBOARD_12KEY = 3
- };
-
- enum {
- NAVIGATION_UNDEFINED = 0,
- NAVIGATION_NONAV = 1,
- NAVIGATION_DPAD = 2,
- NAVIGATION_TRACKBALL = 3,
- NAVIGATION_WHEEL = 4
- };
-
- int32_t touchScreen;
- int32_t keyboard;
- int32_t navigation;
-};
-
-/*
- * Pointer coordinate data.
- */
-struct PointerCoords {
- enum { MAX_AXES = 14 }; // 14 so that sizeof(PointerCoords) == 64
-
- // Bitfield of axes that are present in this structure.
- uint64_t bits;
-
- // Values of axes that are stored in this structure packed in order by axis id
- // for each axis that is present in the structure according to 'bits'.
- float values[MAX_AXES];
-
- inline void clear() {
- bits = 0;
- }
-
- float getAxisValue(int32_t axis) const;
- status_t setAxisValue(int32_t axis, float value);
-
- void scale(float scale);
-
- inline float getX() const {
- return getAxisValue(AMOTION_EVENT_AXIS_X);
- }
-
- inline float getY() const {
- return getAxisValue(AMOTION_EVENT_AXIS_Y);
- }
-
-#ifdef HAVE_ANDROID_OS
- status_t readFromParcel(Parcel* parcel);
- status_t writeToParcel(Parcel* parcel) const;
-#endif
-
- bool operator==(const PointerCoords& other) const;
- inline bool operator!=(const PointerCoords& other) const {
- return !(*this == other);
- }
-
- void copyFrom(const PointerCoords& other);
-
-private:
- void tooManyAxes(int axis);
-};
-
-/*
- * Pointer property data.
- */
-struct PointerProperties {
- // The id of the pointer.
- int32_t id;
-
- // The pointer tool type.
- int32_t toolType;
-
- inline void clear() {
- id = -1;
- toolType = 0;
- }
-
- bool operator==(const PointerProperties& other) const;
- inline bool operator!=(const PointerProperties& other) const {
- return !(*this == other);
- }
-
- void copyFrom(const PointerProperties& other);
-};
-
-/*
- * Input events.
- */
-class InputEvent : public AInputEvent {
-public:
- virtual ~InputEvent() { }
-
- virtual int32_t getType() const = 0;
-
- inline int32_t getDeviceId() const { return mDeviceId; }
-
- inline int32_t getSource() const { return mSource; }
-
- inline void setSource(int32_t source) { mSource = source; }
-
-protected:
- void initialize(int32_t deviceId, int32_t source);
- void initialize(const InputEvent& from);
-
- int32_t mDeviceId;
- int32_t mSource;
-};
-
-/*
- * Key events.
- */
-class KeyEvent : public InputEvent {
-public:
- virtual ~KeyEvent() { }
-
- virtual int32_t getType() const { return AINPUT_EVENT_TYPE_KEY; }
-
- inline int32_t getAction() const { return mAction; }
-
- inline int32_t getFlags() const { return mFlags; }
-
- inline int32_t getKeyCode() const { return mKeyCode; }
-
- inline int32_t getScanCode() const { return mScanCode; }
-
- inline int32_t getMetaState() const { return mMetaState; }
-
- inline int32_t getRepeatCount() const { return mRepeatCount; }
-
- inline nsecs_t getDownTime() const { return mDownTime; }
-
- inline nsecs_t getEventTime() const { return mEventTime; }
-
- // Return true if this event may have a default action implementation.
- static bool hasDefaultAction(int32_t keyCode);
- bool hasDefaultAction() const;
-
- // Return true if this event represents a system key.
- static bool isSystemKey(int32_t keyCode);
- bool isSystemKey() const;
-
- void initialize(
- int32_t deviceId,
- int32_t source,
- int32_t action,
- int32_t flags,
- int32_t keyCode,
- int32_t scanCode,
- int32_t metaState,
- int32_t repeatCount,
- nsecs_t downTime,
- nsecs_t eventTime);
- void initialize(const KeyEvent& from);
-
-protected:
- int32_t mAction;
- int32_t mFlags;
- int32_t mKeyCode;
- int32_t mScanCode;
- int32_t mMetaState;
- int32_t mRepeatCount;
- nsecs_t mDownTime;
- nsecs_t mEventTime;
-};
-
-/*
- * Motion events.
- */
-class MotionEvent : public InputEvent {
-public:
- virtual ~MotionEvent() { }
-
- virtual int32_t getType() const { return AINPUT_EVENT_TYPE_MOTION; }
-
- inline int32_t getAction() const { return mAction; }
-
- inline int32_t getActionMasked() const { return mAction & AMOTION_EVENT_ACTION_MASK; }
-
- inline int32_t getActionIndex() const {
- return (mAction & AMOTION_EVENT_ACTION_POINTER_INDEX_MASK)
- >> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT;
- }
-
- inline void setAction(int32_t action) { mAction = action; }
-
- inline int32_t getFlags() const { return mFlags; }
-
- inline void setFlags(int32_t flags) { mFlags = flags; }
-
- inline int32_t getEdgeFlags() const { return mEdgeFlags; }
-
- inline void setEdgeFlags(int32_t edgeFlags) { mEdgeFlags = edgeFlags; }
-
- inline int32_t getMetaState() const { return mMetaState; }
-
- inline void setMetaState(int32_t metaState) { mMetaState = metaState; }
-
- inline int32_t getButtonState() const { return mButtonState; }
-
- inline float getXOffset() const { return mXOffset; }
-
- inline float getYOffset() const { return mYOffset; }
-
- inline float getXPrecision() const { return mXPrecision; }
-
- inline float getYPrecision() const { return mYPrecision; }
-
- inline nsecs_t getDownTime() const { return mDownTime; }
-
- inline void setDownTime(nsecs_t downTime) { mDownTime = downTime; }
-
- inline size_t getPointerCount() const { return mPointerProperties.size(); }
-
- inline const PointerProperties* getPointerProperties(size_t pointerIndex) const {
- return &mPointerProperties[pointerIndex];
- }
-
- inline int32_t getPointerId(size_t pointerIndex) const {
- return mPointerProperties[pointerIndex].id;
- }
-
- inline int32_t getToolType(size_t pointerIndex) const {
- return mPointerProperties[pointerIndex].toolType;
- }
-
- inline nsecs_t getEventTime() const { return mSampleEventTimes[getHistorySize()]; }
-
- const PointerCoords* getRawPointerCoords(size_t pointerIndex) const;
-
- float getRawAxisValue(int32_t axis, size_t pointerIndex) const;
-
- inline float getRawX(size_t pointerIndex) const {
- return getRawAxisValue(AMOTION_EVENT_AXIS_X, pointerIndex);
- }
-
- inline float getRawY(size_t pointerIndex) const {
- return getRawAxisValue(AMOTION_EVENT_AXIS_Y, pointerIndex);
- }
-
- float getAxisValue(int32_t axis, size_t pointerIndex) const;
-
- inline float getX(size_t pointerIndex) const {
- return getAxisValue(AMOTION_EVENT_AXIS_X, pointerIndex);
- }
-
- inline float getY(size_t pointerIndex) const {
- return getAxisValue(AMOTION_EVENT_AXIS_Y, pointerIndex);
- }
-
- inline float getPressure(size_t pointerIndex) const {
- return getAxisValue(AMOTION_EVENT_AXIS_PRESSURE, pointerIndex);
- }
-
- inline float getSize(size_t pointerIndex) const {
- return getAxisValue(AMOTION_EVENT_AXIS_SIZE, pointerIndex);
- }
-
- inline float getTouchMajor(size_t pointerIndex) const {
- return getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR, pointerIndex);
- }
-
- inline float getTouchMinor(size_t pointerIndex) const {
- return getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR, pointerIndex);
- }
-
- inline float getToolMajor(size_t pointerIndex) const {
- return getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, pointerIndex);
- }
-
- inline float getToolMinor(size_t pointerIndex) const {
- return getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, pointerIndex);
- }
-
- inline float getOrientation(size_t pointerIndex) const {
- return getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, pointerIndex);
- }
-
- inline size_t getHistorySize() const { return mSampleEventTimes.size() - 1; }
-
- inline nsecs_t getHistoricalEventTime(size_t historicalIndex) const {
- return mSampleEventTimes[historicalIndex];
- }
-
- const PointerCoords* getHistoricalRawPointerCoords(
- size_t pointerIndex, size_t historicalIndex) const;
-
- float getHistoricalRawAxisValue(int32_t axis, size_t pointerIndex,
- size_t historicalIndex) const;
-
- inline float getHistoricalRawX(size_t pointerIndex, size_t historicalIndex) const {
- return getHistoricalRawAxisValue(
- AMOTION_EVENT_AXIS_X, pointerIndex, historicalIndex);
- }
-
- inline float getHistoricalRawY(size_t pointerIndex, size_t historicalIndex) const {
- return getHistoricalRawAxisValue(
- AMOTION_EVENT_AXIS_Y, pointerIndex, historicalIndex);
- }
-
- float getHistoricalAxisValue(int32_t axis, size_t pointerIndex, size_t historicalIndex) const;
-
- inline float getHistoricalX(size_t pointerIndex, size_t historicalIndex) const {
- return getHistoricalAxisValue(
- AMOTION_EVENT_AXIS_X, pointerIndex, historicalIndex);
- }
-
- inline float getHistoricalY(size_t pointerIndex, size_t historicalIndex) const {
- return getHistoricalAxisValue(
- AMOTION_EVENT_AXIS_Y, pointerIndex, historicalIndex);
- }
-
- inline float getHistoricalPressure(size_t pointerIndex, size_t historicalIndex) const {
- return getHistoricalAxisValue(
- AMOTION_EVENT_AXIS_PRESSURE, pointerIndex, historicalIndex);
- }
-
- inline float getHistoricalSize(size_t pointerIndex, size_t historicalIndex) const {
- return getHistoricalAxisValue(
- AMOTION_EVENT_AXIS_SIZE, pointerIndex, historicalIndex);
- }
-
- inline float getHistoricalTouchMajor(size_t pointerIndex, size_t historicalIndex) const {
- return getHistoricalAxisValue(
- AMOTION_EVENT_AXIS_TOUCH_MAJOR, pointerIndex, historicalIndex);
- }
-
- inline float getHistoricalTouchMinor(size_t pointerIndex, size_t historicalIndex) const {
- return getHistoricalAxisValue(
- AMOTION_EVENT_AXIS_TOUCH_MINOR, pointerIndex, historicalIndex);
- }
-
- inline float getHistoricalToolMajor(size_t pointerIndex, size_t historicalIndex) const {
- return getHistoricalAxisValue(
- AMOTION_EVENT_AXIS_TOOL_MAJOR, pointerIndex, historicalIndex);
- }
-
- inline float getHistoricalToolMinor(size_t pointerIndex, size_t historicalIndex) const {
- return getHistoricalAxisValue(
- AMOTION_EVENT_AXIS_TOOL_MINOR, pointerIndex, historicalIndex);
- }
-
- inline float getHistoricalOrientation(size_t pointerIndex, size_t historicalIndex) const {
- return getHistoricalAxisValue(
- AMOTION_EVENT_AXIS_ORIENTATION, pointerIndex, historicalIndex);
- }
-
- ssize_t findPointerIndex(int32_t pointerId) const;
-
- void initialize(
- int32_t deviceId,
- int32_t source,
- int32_t action,
- int32_t flags,
- int32_t edgeFlags,
- int32_t metaState,
- int32_t buttonState,
- float xOffset,
- float yOffset,
- float xPrecision,
- float yPrecision,
- nsecs_t downTime,
- nsecs_t eventTime,
- size_t pointerCount,
- const PointerProperties* pointerProperties,
- const PointerCoords* pointerCoords);
-
- void copyFrom(const MotionEvent* other, bool keepHistory);
-
- void addSample(
- nsecs_t eventTime,
- const PointerCoords* pointerCoords);
-
- void offsetLocation(float xOffset, float yOffset);
-
- void scale(float scaleFactor);
-
-#ifdef HAVE_ANDROID_OS
- void transform(const SkMatrix* matrix);
-
- status_t readFromParcel(Parcel* parcel);
- status_t writeToParcel(Parcel* parcel) const;
-#endif
-
- static bool isTouchEvent(int32_t source, int32_t action);
- inline bool isTouchEvent() const {
- return isTouchEvent(mSource, mAction);
- }
-
- // Low-level accessors.
- inline const PointerProperties* getPointerProperties() const {
- return mPointerProperties.array();
- }
- inline const nsecs_t* getSampleEventTimes() const { return mSampleEventTimes.array(); }
- inline const PointerCoords* getSamplePointerCoords() const {
- return mSamplePointerCoords.array();
- }
-
-protected:
- int32_t mAction;
- int32_t mFlags;
- int32_t mEdgeFlags;
- int32_t mMetaState;
- int32_t mButtonState;
- float mXOffset;
- float mYOffset;
- float mXPrecision;
- float mYPrecision;
- nsecs_t mDownTime;
- Vector<PointerProperties> mPointerProperties;
- Vector<nsecs_t> mSampleEventTimes;
- Vector<PointerCoords> mSamplePointerCoords;
-};
-
-/*
- * Input event factory.
- */
-class InputEventFactoryInterface {
-protected:
- virtual ~InputEventFactoryInterface() { }
-
-public:
- InputEventFactoryInterface() { }
-
- virtual KeyEvent* createKeyEvent() = 0;
- virtual MotionEvent* createMotionEvent() = 0;
-};
-
-/*
- * A simple input event factory implementation that uses a single preallocated instance
- * of each type of input event that are reused for each request.
- */
-class PreallocatedInputEventFactory : public InputEventFactoryInterface {
-public:
- PreallocatedInputEventFactory() { }
- virtual ~PreallocatedInputEventFactory() { }
-
- virtual KeyEvent* createKeyEvent() { return & mKeyEvent; }
- virtual MotionEvent* createMotionEvent() { return & mMotionEvent; }
-
-private:
- KeyEvent mKeyEvent;
- MotionEvent mMotionEvent;
-};
-
-/*
- * Calculates the velocity of pointer movements over time.
- */
-class VelocityTracker {
-public:
- // Default polynomial degree. (used by getVelocity)
- static const uint32_t DEFAULT_DEGREE = 2;
-
- // Default sample horizon. (used by getVelocity)
- // We don't use too much history by default since we want to react to quick
- // changes in direction.
- static const nsecs_t DEFAULT_HORIZON = 100 * 1000000; // 100 ms
-
- struct Position {
- float x, y;
- };
-
- struct Estimator {
- static const size_t MAX_DEGREE = 2;
-
- // Polynomial coefficients describing motion in X and Y.
- float xCoeff[MAX_DEGREE + 1], yCoeff[MAX_DEGREE + 1];
-
- // Polynomial degree (number of coefficients), or zero if no information is
- // available.
- uint32_t degree;
-
- // Confidence (coefficient of determination), between 0 (no fit) and 1 (perfect fit).
- float confidence;
-
- inline void clear() {
- degree = 0;
- confidence = 0;
- for (size_t i = 0; i <= MAX_DEGREE; i++) {
- xCoeff[i] = 0;
- yCoeff[i] = 0;
- }
- }
- };
-
- VelocityTracker();
-
- // Resets the velocity tracker state.
- void clear();
-
- // Resets the velocity tracker state for specific pointers.
- // Call this method when some pointers have changed and may be reusing
- // an id that was assigned to a different pointer earlier.
- void clearPointers(BitSet32 idBits);
-
- // Adds movement information for a set of pointers.
- // The idBits bitfield specifies the pointer ids of the pointers whose positions
- // are included in the movement.
- // The positions array contains position information for each pointer in order by
- // increasing id. Its size should be equal to the number of one bits in idBits.
- void addMovement(nsecs_t eventTime, BitSet32 idBits, const Position* positions);
-
- // Adds movement information for all pointers in a MotionEvent, including historical samples.
- void addMovement(const MotionEvent* event);
-
- // Gets the velocity of the specified pointer id in position units per second.
- // Returns false and sets the velocity components to zero if there is
- // insufficient movement information for the pointer.
- bool getVelocity(uint32_t id, float* outVx, float* outVy) const;
-
- // Gets a quadratic estimator for the movements of the specified pointer id.
- // Returns false and clears the estimator if there is no information available
- // about the pointer.
- bool getEstimator(uint32_t id, uint32_t degree, nsecs_t horizon,
- Estimator* outEstimator) const;
-
- // Gets the active pointer id, or -1 if none.
- inline int32_t getActivePointerId() const { return mActivePointerId; }
-
- // Gets a bitset containing all pointer ids from the most recent movement.
- inline BitSet32 getCurrentPointerIdBits() const { return mMovements[mIndex].idBits; }
-
-private:
- // Number of samples to keep.
- static const uint32_t HISTORY_SIZE = 20;
-
- struct Movement {
- nsecs_t eventTime;
- BitSet32 idBits;
- Position positions[MAX_POINTERS];
-
- inline const Position& getPosition(uint32_t id) const {
- return positions[idBits.getIndexOfBit(id)];
- }
- };
-
- uint32_t mIndex;
- Movement mMovements[HISTORY_SIZE];
- int32_t mActivePointerId;
-};
-
-
-/*
- * Specifies parameters that govern pointer or wheel acceleration.
- */
-struct VelocityControlParameters {
- // A scale factor that is multiplied with the raw velocity deltas
- // prior to applying any other velocity control factors. The scale
- // factor should be used to adapt the input device resolution
- // (eg. counts per inch) to the output device resolution (eg. pixels per inch).
- //
- // Must be a positive value.
- // Default is 1.0 (no scaling).
- float scale;
-
- // The scaled speed at which acceleration begins to be applied.
- // This value establishes the upper bound of a low speed regime for
- // small precise motions that are performed without any acceleration.
- //
- // Must be a non-negative value.
- // Default is 0.0 (no low threshold).
- float lowThreshold;
-
- // The scaled speed at which maximum acceleration is applied.
- // The difference between highThreshold and lowThreshold controls
- // the range of speeds over which the acceleration factor is interpolated.
- // The wider the range, the smoother the acceleration.
- //
- // Must be a non-negative value greater than or equal to lowThreshold.
- // Default is 0.0 (no high threshold).
- float highThreshold;
-
- // The acceleration factor.
- // When the speed is above the low speed threshold, the velocity will scaled
- // by an interpolated value between 1.0 and this amount.
- //
- // Must be a positive greater than or equal to 1.0.
- // Default is 1.0 (no acceleration).
- float acceleration;
-
- VelocityControlParameters() :
- scale(1.0f), lowThreshold(0.0f), highThreshold(0.0f), acceleration(1.0f) {
- }
-
- VelocityControlParameters(float scale, float lowThreshold,
- float highThreshold, float acceleration) :
- scale(scale), lowThreshold(lowThreshold),
- highThreshold(highThreshold), acceleration(acceleration) {
- }
-};
-
-/*
- * Implements mouse pointer and wheel speed control and acceleration.
- */
-class VelocityControl {
-public:
- VelocityControl();
-
- /* Sets the various parameters. */
- void setParameters(const VelocityControlParameters& parameters);
-
- /* Resets the current movement counters to zero.
- * This has the effect of nullifying any acceleration. */
- void reset();
-
- /* Translates a raw movement delta into an appropriately
- * scaled / accelerated delta based on the current velocity. */
- void move(nsecs_t eventTime, float* deltaX, float* deltaY);
-
-private:
- // If no movements are received within this amount of time,
- // we assume the movement has stopped and reset the movement counters.
- static const nsecs_t STOP_TIME = 500 * 1000000; // 500 ms
-
- VelocityControlParameters mParameters;
-
- nsecs_t mLastMovementTime;
- VelocityTracker::Position mRawPosition;
- VelocityTracker mVelocityTracker;
-};
-
-
-/*
- * Describes the characteristics and capabilities of an input device.
- */
-class InputDeviceInfo {
-public:
- InputDeviceInfo();
- InputDeviceInfo(const InputDeviceInfo& other);
- ~InputDeviceInfo();
-
- struct MotionRange {
- int32_t axis;
- uint32_t source;
- float min;
- float max;
- float flat;
- float fuzz;
- };
-
- void initialize(int32_t id, const String8& name);
-
- inline int32_t getId() const { return mId; }
- inline const String8 getName() const { return mName; }
- inline uint32_t getSources() const { return mSources; }
-
- const MotionRange* getMotionRange(int32_t axis, uint32_t source) const;
-
- void addSource(uint32_t source);
- void addMotionRange(int32_t axis, uint32_t source,
- float min, float max, float flat, float fuzz);
- void addMotionRange(const MotionRange& range);
-
- inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; }
- inline int32_t getKeyboardType() const { return mKeyboardType; }
-
- inline void setKeyCharacterMapFile(const String8& value) { mKeyCharacterMapFile = value; }
- inline const String8& getKeyCharacterMapFile() const { return mKeyCharacterMapFile; }
-
- inline const Vector<MotionRange>& getMotionRanges() const {
- return mMotionRanges;
- }
-
-private:
- int32_t mId;
- String8 mName;
- uint32_t mSources;
- int32_t mKeyboardType;
- String8 mKeyCharacterMapFile;
-
- Vector<MotionRange> mMotionRanges;
-};
-
-/*
- * Identifies a device.
- */
-struct InputDeviceIdentifier {
- inline InputDeviceIdentifier() :
- bus(0), vendor(0), product(0), version(0) {
- }
-
- String8 name;
- String8 location;
- String8 uniqueId;
- uint16_t bus;
- uint16_t vendor;
- uint16_t product;
- uint16_t version;
-};
-
-/* Types of input device configuration files. */
-enum InputDeviceConfigurationFileType {
- INPUT_DEVICE_CONFIGURATION_FILE_TYPE_CONFIGURATION = 0, /* .idc file */
- INPUT_DEVICE_CONFIGURATION_FILE_TYPE_KEY_LAYOUT = 1, /* .kl file */
- INPUT_DEVICE_CONFIGURATION_FILE_TYPE_KEY_CHARACTER_MAP = 2, /* .kcm file */
-};
-
-/*
- * Gets the path of an input device configuration file, if one is available.
- * Considers both system provided and user installed configuration files.
- *
- * The device identifier is used to construct several default configuration file
- * names to try based on the device name, vendor, product, and version.
- *
- * Returns an empty string if not found.
- */
-extern String8 getInputDeviceConfigurationFilePathByDeviceIdentifier(
- const InputDeviceIdentifier& deviceIdentifier,
- InputDeviceConfigurationFileType type);
-
-/*
- * Gets the path of an input device configuration file, if one is available.
- * Considers both system provided and user installed configuration files.
- *
- * The name is case-sensitive and is used to construct the filename to resolve.
- * All characters except 'a'-'z', 'A'-'Z', '0'-'9', '-', and '_' are replaced by underscores.
- *
- * Returns an empty string if not found.
- */
-extern String8 getInputDeviceConfigurationFilePathByName(
- const String8& name, InputDeviceConfigurationFileType type);
-
-} // namespace android
-
-#endif // _UI_INPUT_H
diff --git a/include/ui/InputTransport.h b/include/ui/InputTransport.h
deleted file mode 100644
index 95e4447..0000000
--- a/include/ui/InputTransport.h
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#ifndef _UI_INPUT_TRANSPORT_H
-#define _UI_INPUT_TRANSPORT_H
-
-/**
- * Native input transport.
- *
- * Uses anonymous shared memory as a whiteboard for sending input events from an
- * InputPublisher to an InputConsumer and ensuring appropriate synchronization.
- * One interesting feature is that published events can be updated in place as long as they
- * have not yet been consumed.
- *
- * The InputPublisher and InputConsumer only take care of transferring event data
- * over an InputChannel and sending synchronization signals. The InputDispatcher and InputQueue
- * build on these abstractions to add multiplexing and queueing.
- */
-
-#include <semaphore.h>
-#include <ui/Input.h>
-#include <utils/Errors.h>
-#include <utils/Timers.h>
-#include <utils/RefBase.h>
-#include <utils/String8.h>
-
-namespace android {
-
-/*
- * An input channel consists of a shared memory buffer and a pair of pipes
- * used to send input messages from an InputPublisher to an InputConsumer
- * across processes. Each channel has a descriptive name for debugging purposes.
- *
- * Each endpoint has its own InputChannel object that specifies its own file descriptors.
- *
- * The input channel is closed when all references to it are released.
- */
-class InputChannel : public RefBase {
-protected:
- virtual ~InputChannel();
-
-public:
- InputChannel(const String8& name, int32_t ashmemFd, int32_t receivePipeFd,
- int32_t sendPipeFd);
-
- /* Creates a pair of input channels and their underlying shared memory buffers
- * and pipes.
- *
- * Returns OK on success.
- */
- static status_t openInputChannelPair(const String8& name,
- sp<InputChannel>& outServerChannel, sp<InputChannel>& outClientChannel);
-
- inline String8 getName() const { return mName; }
- inline int32_t getAshmemFd() const { return mAshmemFd; }
- inline int32_t getReceivePipeFd() const { return mReceivePipeFd; }
- inline int32_t getSendPipeFd() const { return mSendPipeFd; }
-
- /* Sends a signal to the other endpoint.
- *
- * Returns OK on success.
- * Returns DEAD_OBJECT if the channel's peer has been closed.
- * Other errors probably indicate that the channel is broken.
- */
- status_t sendSignal(char signal);
-
- /* Receives a signal send by the other endpoint.
- * (Should only call this after poll() indicates that the receivePipeFd has available input.)
- *
- * Returns OK on success.
- * Returns WOULD_BLOCK if there is no signal present.
- * Returns DEAD_OBJECT if the channel's peer has been closed.
- * Other errors probably indicate that the channel is broken.
- */
- status_t receiveSignal(char* outSignal);
-
-private:
- String8 mName;
- int32_t mAshmemFd;
- int32_t mReceivePipeFd;
- int32_t mSendPipeFd;
-};
-
-/*
- * Private intermediate representation of input events as messages written into an
- * ashmem buffer.
- */
-struct InputMessage {
- /* Semaphore count is set to 1 when the message is published.
- * It becomes 0 transiently while the publisher updates the message.
- * It becomes 0 permanently when the consumer consumes the message.
- */
- sem_t semaphore;
-
- /* Initialized to false by the publisher.
- * Set to true by the consumer when it consumes the message.
- */
- bool consumed;
-
- int32_t type;
-
- struct SampleData {
- nsecs_t eventTime;
- PointerCoords coords[0]; // variable length
- };
-
- int32_t deviceId;
- int32_t source;
-
- union {
- struct {
- int32_t action;
- int32_t flags;
- int32_t keyCode;
- int32_t scanCode;
- int32_t metaState;
- int32_t repeatCount;
- nsecs_t downTime;
- nsecs_t eventTime;
- } key;
-
- struct {
- int32_t action;
- int32_t flags;
- int32_t metaState;
- int32_t buttonState;
- int32_t edgeFlags;
- nsecs_t downTime;
- float xOffset;
- float yOffset;
- float xPrecision;
- float yPrecision;
- size_t pointerCount;
- PointerProperties pointerProperties[MAX_POINTERS];
- size_t sampleCount;
- SampleData sampleData[0]; // variable length
- } motion;
- };
-
- /* Gets the number of bytes to add to step to the next SampleData object in a motion
- * event message for a given number of pointers.
- */
- static inline size_t sampleDataStride(size_t pointerCount) {
- return sizeof(InputMessage::SampleData) + pointerCount * sizeof(PointerCoords);
- }
-
- /* Adds the SampleData stride to the given pointer. */
- static inline SampleData* sampleDataPtrIncrement(SampleData* ptr, size_t stride) {
- return reinterpret_cast<InputMessage::SampleData*>(reinterpret_cast<char*>(ptr) + stride);
- }
-};
-
-/*
- * Publishes input events to an anonymous shared memory buffer.
- * Uses atomic operations to coordinate shared access with a single concurrent consumer.
- */
-class InputPublisher {
-public:
- /* Creates a publisher associated with an input channel. */
- explicit InputPublisher(const sp<InputChannel>& channel);
-
- /* Destroys the publisher and releases its input channel. */
- ~InputPublisher();
-
- /* Gets the underlying input channel. */
- inline sp<InputChannel> getChannel() { return mChannel; }
-
- /* Prepares the publisher for use. Must be called before it is used.
- * Returns OK on success.
- *
- * This method implicitly calls reset(). */
- status_t initialize();
-
- /* Resets the publisher to its initial state and unpins its ashmem buffer.
- * Returns OK on success.
- *
- * Should be called after an event has been consumed to release resources used by the
- * publisher until the next event is ready to be published.
- */
- status_t reset();
-
- /* Publishes a key event to the ashmem buffer.
- *
- * Returns OK on success.
- * Returns INVALID_OPERATION if the publisher has not been reset.
- */
- status_t publishKeyEvent(
- int32_t deviceId,
- int32_t source,
- int32_t action,
- int32_t flags,
- int32_t keyCode,
- int32_t scanCode,
- int32_t metaState,
- int32_t repeatCount,
- nsecs_t downTime,
- nsecs_t eventTime);
-
- /* Publishes a motion event to the ashmem buffer.
- *
- * Returns OK on success.
- * Returns INVALID_OPERATION if the publisher has not been reset.
- * Returns BAD_VALUE if pointerCount is less than 1 or greater than MAX_POINTERS.
- */
- status_t publishMotionEvent(
- int32_t deviceId,
- int32_t source,
- int32_t action,
- int32_t flags,
- int32_t edgeFlags,
- int32_t metaState,
- int32_t buttonState,
- float xOffset,
- float yOffset,
- float xPrecision,
- float yPrecision,
- nsecs_t downTime,
- nsecs_t eventTime,
- size_t pointerCount,
- const PointerProperties* pointerProperties,
- const PointerCoords* pointerCoords);
-
- /* Appends a motion sample to a motion event unless already consumed.
- *
- * Returns OK on success.
- * Returns INVALID_OPERATION if the current event is not a AMOTION_EVENT_ACTION_MOVE event.
- * Returns FAILED_TRANSACTION if the current event has already been consumed.
- * Returns NO_MEMORY if the buffer is full and no additional samples can be added.
- */
- status_t appendMotionSample(
- nsecs_t eventTime,
- const PointerCoords* pointerCoords);
-
- /* Sends a dispatch signal to the consumer to inform it that a new message is available.
- *
- * Returns OK on success.
- * Errors probably indicate that the channel is broken.
- */
- status_t sendDispatchSignal();
-
- /* Receives the finished signal from the consumer in reply to the original dispatch signal.
- * Returns whether the consumer handled the message.
- *
- * Returns OK on success.
- * Returns WOULD_BLOCK if there is no signal present.
- * Other errors probably indicate that the channel is broken.
- */
- status_t receiveFinishedSignal(bool* outHandled);
-
-private:
- sp<InputChannel> mChannel;
-
- size_t mAshmemSize;
- InputMessage* mSharedMessage;
- bool mPinned;
- bool mSemaphoreInitialized;
- bool mWasDispatched;
-
- size_t mMotionEventPointerCount;
- InputMessage::SampleData* mMotionEventSampleDataTail;
- size_t mMotionEventSampleDataStride;
-
- status_t publishInputEvent(
- int32_t type,
- int32_t deviceId,
- int32_t source);
-};
-
-/*
- * Consumes input events from an anonymous shared memory buffer.
- * Uses atomic operations to coordinate shared access with a single concurrent publisher.
- */
-class InputConsumer {
-public:
- /* Creates a consumer associated with an input channel. */
- explicit InputConsumer(const sp<InputChannel>& channel);
-
- /* Destroys the consumer and releases its input channel. */
- ~InputConsumer();
-
- /* Gets the underlying input channel. */
- inline sp<InputChannel> getChannel() { return mChannel; }
-
- /* Prepares the consumer for use. Must be called before it is used. */
- status_t initialize();
-
- /* Consumes the input event in the buffer and copies its contents into
- * an InputEvent object created using the specified factory.
- * This operation will block if the publisher is updating the event.
- *
- * Returns OK on success.
- * Returns INVALID_OPERATION if there is no currently published event.
- * Returns NO_MEMORY if the event could not be created.
- */
- status_t consume(InputEventFactoryInterface* factory, InputEvent** outEvent);
-
- /* Sends a finished signal to the publisher to inform it that the current message is
- * finished processing and specifies whether the message was handled by the consumer.
- *
- * Returns OK on success.
- * Errors probably indicate that the channel is broken.
- */
- status_t sendFinishedSignal(bool handled);
-
- /* Receives the dispatched signal from the publisher.
- *
- * Returns OK on success.
- * Returns WOULD_BLOCK if there is no signal present.
- * Other errors probably indicate that the channel is broken.
- */
- status_t receiveDispatchSignal();
-
-private:
- sp<InputChannel> mChannel;
-
- size_t mAshmemSize;
- InputMessage* mSharedMessage;
-
- void populateKeyEvent(KeyEvent* keyEvent) const;
- void populateMotionEvent(MotionEvent* motionEvent) const;
-};
-
-} // namespace android
-
-#endif // _UI_INPUT_TRANSPORT_H
diff --git a/include/ui/KeyCharacterMap.h b/include/ui/KeyCharacterMap.h
deleted file mode 100644
index be14432..0000000
--- a/include/ui/KeyCharacterMap.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-#ifndef _UI_KEY_CHARACTER_MAP_H
-#define _UI_KEY_CHARACTER_MAP_H
-
-#include <stdint.h>
-
-#include <ui/Input.h>
-#include <utils/Errors.h>
-#include <utils/KeyedVector.h>
-#include <utils/Tokenizer.h>
-#include <utils/String8.h>
-#include <utils/Unicode.h>
-
-namespace android {
-
-/**
- * Describes a mapping from Android key codes to characters.
- * Also specifies other functions of the keyboard such as the keyboard type
- * and key modifier semantics.
- */
-class KeyCharacterMap {
-public:
- enum KeyboardType {
- KEYBOARD_TYPE_UNKNOWN = 0,
- KEYBOARD_TYPE_NUMERIC = 1,
- KEYBOARD_TYPE_PREDICTIVE = 2,
- KEYBOARD_TYPE_ALPHA = 3,
- KEYBOARD_TYPE_FULL = 4,
- KEYBOARD_TYPE_SPECIAL_FUNCTION = 5,
- };
-
- // Substitute key code and meta state for fallback action.
- struct FallbackAction {
- int32_t keyCode;
- int32_t metaState;
- };
-
- ~KeyCharacterMap();
-
- static status_t load(const String8& filename, KeyCharacterMap** outMap);
-
- /* Gets the keyboard type. */
- int32_t getKeyboardType() const;
-
- /* Gets the primary character for this key as in the label physically printed on it.
- * Returns 0 if none (eg. for non-printing keys). */
- char16_t getDisplayLabel(int32_t keyCode) const;
-
- /* Gets the Unicode character for the number or symbol generated by the key
- * when the keyboard is used as a dialing pad.
- * Returns 0 if no number or symbol is generated.
- */
- char16_t getNumber(int32_t keyCode) const;
-
- /* Gets the Unicode character generated by the key and meta key modifiers.
- * Returns 0 if no character is generated.
- */
- char16_t getCharacter(int32_t keyCode, int32_t metaState) const;
-
- /* Gets the fallback action to use by default if the application does not
- * handle the specified key.
- * Returns true if an action was available, false if none.
- */
- bool getFallbackAction(int32_t keyCode, int32_t metaState,
- FallbackAction* outFallbackAction) const;
-
- /* Gets the first matching Unicode character that can be generated by the key,
- * preferring the one with the specified meta key modifiers.
- * Returns 0 if no matching character is generated.
- */
- char16_t getMatch(int32_t keyCode, const char16_t* chars,
- size_t numChars, int32_t metaState) const;
-
- /* Gets a sequence of key events that could plausibly generate the specified
- * character sequence. Returns false if some of the characters cannot be generated.
- */
- bool getEvents(int32_t deviceId, const char16_t* chars, size_t numChars,
- Vector<KeyEvent>& outEvents) const;
-
-private:
- struct Behavior {
- Behavior();
-
- /* The next behavior in the list, or NULL if none. */
- Behavior* next;
-
- /* The meta key modifiers for this behavior. */
- int32_t metaState;
-
- /* The character to insert. */
- char16_t character;
-
- /* The fallback keycode if the key is not handled. */
- int32_t fallbackKeyCode;
- };
-
- struct Key {
- Key();
- ~Key();
-
- /* The single character label printed on the key, or 0 if none. */
- char16_t label;
-
- /* The number or symbol character generated by the key, or 0 if none. */
- char16_t number;
-
- /* The list of key behaviors sorted from most specific to least specific
- * meta key binding. */
- Behavior* firstBehavior;
- };
-
- class Parser {
- enum State {
- STATE_TOP = 0,
- STATE_KEY = 1,
- };
-
- enum {
- PROPERTY_LABEL = 1,
- PROPERTY_NUMBER = 2,
- PROPERTY_META = 3,
- };
-
- struct Property {
- inline Property(int32_t property = 0, int32_t metaState = 0) :
- property(property), metaState(metaState) { }
-
- int32_t property;
- int32_t metaState;
- };
-
- KeyCharacterMap* mMap;
- Tokenizer* mTokenizer;
- State mState;
- int32_t mKeyCode;
-
- public:
- Parser(KeyCharacterMap* map, Tokenizer* tokenizer);
- ~Parser();
- status_t parse();
-
- private:
- status_t parseType();
- status_t parseKey();
- status_t parseKeyProperty();
- status_t parseModifier(const String8& token, int32_t* outMetaState);
- status_t parseCharacterLiteral(char16_t* outCharacter);
- };
-
- KeyedVector<int32_t, Key*> mKeys;
- int mType;
-
- KeyCharacterMap();
-
- bool getKey(int32_t keyCode, const Key** outKey) const;
- bool getKeyBehavior(int32_t keyCode, int32_t metaState,
- const Key** outKey, const Behavior** outBehavior) const;
-
- bool findKey(char16_t ch, int32_t* outKeyCode, int32_t* outMetaState) const;
-
- static void addKey(Vector<KeyEvent>& outEvents,
- int32_t deviceId, int32_t keyCode, int32_t metaState, bool down, nsecs_t time);
- static void addMetaKeys(Vector<KeyEvent>& outEvents,
- int32_t deviceId, int32_t metaState, bool down, nsecs_t time,
- int32_t* currentMetaState);
- static bool addSingleEphemeralMetaKey(Vector<KeyEvent>& outEvents,
- int32_t deviceId, int32_t metaState, bool down, nsecs_t time,
- int32_t keyCode, int32_t keyMetaState,
- int32_t* currentMetaState);
- static void addDoubleEphemeralMetaKey(Vector<KeyEvent>& outEvents,
- int32_t deviceId, int32_t metaState, bool down, nsecs_t time,
- int32_t leftKeyCode, int32_t leftKeyMetaState,
- int32_t rightKeyCode, int32_t rightKeyMetaState,
- int32_t eitherKeyMetaState,
- int32_t* currentMetaState);
- static void addLockedMetaKey(Vector<KeyEvent>& outEvents,
- int32_t deviceId, int32_t metaState, nsecs_t time,
- int32_t keyCode, int32_t keyMetaState,
- int32_t* currentMetaState);
-};
-
-} // namespace android
-
-#endif // _UI_KEY_CHARACTER_MAP_H
diff --git a/include/ui/KeyLayoutMap.h b/include/ui/KeyLayoutMap.h
deleted file mode 100644
index d82d0c8..0000000
--- a/include/ui/KeyLayoutMap.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-#ifndef _UI_KEY_LAYOUT_MAP_H
-#define _UI_KEY_LAYOUT_MAP_H
-
-#include <stdint.h>
-#include <utils/Errors.h>
-#include <utils/KeyedVector.h>
-#include <utils/Tokenizer.h>
-
-namespace android {
-
-struct AxisInfo {
- enum Mode {
- // Axis value is reported directly.
- MODE_NORMAL = 0,
- // Axis value should be inverted before reporting.
- MODE_INVERT = 1,
- // Axis value should be split into two axes
- MODE_SPLIT = 2,
- };
-
- // Axis mode.
- Mode mode;
-
- // Axis id.
- // When split, this is the axis used for values smaller than the split position.
- int32_t axis;
-
- // When split, this is the axis used for values after higher than the split position.
- int32_t highAxis;
-
- // The split value, or 0 if not split.
- int32_t splitValue;
-
- // The flat value, or -1 if none.
- int32_t flatOverride;
-
- AxisInfo() : mode(MODE_NORMAL), axis(-1), highAxis(-1), splitValue(0), flatOverride(-1) {
- }
-};
-
-/**
- * Describes a mapping from keyboard scan codes and joystick axes to Android key codes and axes.
- */
-class KeyLayoutMap {
-public:
- ~KeyLayoutMap();
-
- static status_t load(const String8& filename, KeyLayoutMap** outMap);
-
- status_t mapKey(int32_t scanCode, int32_t* keyCode, uint32_t* flags) const;
- status_t findScanCodesForKey(int32_t keyCode, Vector<int32_t>* outScanCodes) const;
-
- status_t mapAxis(int32_t scanCode, AxisInfo* outAxisInfo) const;
-
-private:
- struct Key {
- int32_t keyCode;
- uint32_t flags;
- };
-
- KeyedVector<int32_t, Key> mKeys;
- KeyedVector<int32_t, AxisInfo> mAxes;
-
- KeyLayoutMap();
-
- class Parser {
- KeyLayoutMap* mMap;
- Tokenizer* mTokenizer;
-
- public:
- Parser(KeyLayoutMap* map, Tokenizer* tokenizer);
- ~Parser();
- status_t parse();
-
- private:
- status_t parseKey();
- status_t parseAxis();
- };
-};
-
-} // namespace android
-
-#endif // _UI_KEY_LAYOUT_MAP_H
diff --git a/include/ui/Keyboard.h b/include/ui/Keyboard.h
deleted file mode 100644
index 274f526..0000000
--- a/include/ui/Keyboard.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#ifndef _UI_KEYBOARD_H
-#define _UI_KEYBOARD_H
-
-#include <ui/Input.h>
-#include <utils/Errors.h>
-#include <utils/String8.h>
-#include <utils/PropertyMap.h>
-
-namespace android {
-
-enum {
- /* Device id of the built in keyboard. */
- DEVICE_ID_BUILT_IN_KEYBOARD = 0,
-
- /* Device id of a generic virtual keyboard with a full layout that can be used
- * to synthesize key events. */
- DEVICE_ID_VIRTUAL_KEYBOARD = -1,
-};
-
-class KeyLayoutMap;
-class KeyCharacterMap;
-
-/**
- * Loads the key layout map and key character map for a keyboard device.
- */
-class KeyMap {
-public:
- String8 keyLayoutFile;
- KeyLayoutMap* keyLayoutMap;
-
- String8 keyCharacterMapFile;
- KeyCharacterMap* keyCharacterMap;
-
- KeyMap();
- ~KeyMap();
-
- status_t load(const InputDeviceIdentifier& deviceIdenfier,
- const PropertyMap* deviceConfiguration);
-
- inline bool haveKeyLayout() const {
- return !keyLayoutFile.isEmpty();
- }
-
- inline bool haveKeyCharacterMap() const {
- return !keyCharacterMapFile.isEmpty();
- }
-
- inline bool isComplete() const {
- return haveKeyLayout() && haveKeyCharacterMap();
- }
-
-private:
- bool probeKeyMap(const InputDeviceIdentifier& deviceIdentifier, const String8& name);
- status_t loadKeyLayout(const InputDeviceIdentifier& deviceIdentifier, const String8& name);
- status_t loadKeyCharacterMap(const InputDeviceIdentifier& deviceIdentifier,
- const String8& name);
- String8 getPath(const InputDeviceIdentifier& deviceIdentifier,
- const String8& name, InputDeviceConfigurationFileType type);
-};
-
-/**
- * Returns true if the keyboard is eligible for use as a built-in keyboard.
- */
-extern bool isEligibleBuiltInKeyboard(const InputDeviceIdentifier& deviceIdentifier,
- const PropertyMap* deviceConfiguration, const KeyMap* keyMap);
-
-/**
- * Gets a key code by its short form label, eg. "HOME".
- * Returns 0 if unknown.
- */
-extern int32_t getKeyCodeByLabel(const char* label);
-
-/**
- * Gets a key flag by its short form label, eg. "WAKE".
- * Returns 0 if unknown.
- */
-extern uint32_t getKeyFlagByLabel(const char* label);
-
-/**
- * Gets a axis by its short form label, eg. "X".
- * Returns -1 if unknown.
- */
-extern int32_t getAxisByLabel(const char* label);
-
-/**
- * Gets a axis label by its id.
- * Returns NULL if unknown.
- */
-extern const char* getAxisLabel(int32_t axisId);
-
-/**
- * Updates a meta state field when a key is pressed or released.
- */
-extern int32_t updateMetaState(int32_t keyCode, bool down, int32_t oldMetaState);
-
-/**
- * Returns true if a key is a meta key like ALT or CAPS_LOCK.
- */
-extern bool isMetaKey(int32_t keyCode);
-
-} // namespace android
-
-#endif // _UI_KEYBOARD_H
diff --git a/include/ui/KeycodeLabels.h b/include/ui/KeycodeLabels.h
deleted file mode 100755
index c5bd0c5..0000000
--- a/include/ui/KeycodeLabels.h
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-#ifndef _UI_KEYCODE_LABELS_H
-#define _UI_KEYCODE_LABELS_H
-
-#include <android/keycodes.h>
-
-struct KeycodeLabel {
- const char *literal;
- int value;
-};
-
-static const KeycodeLabel KEYCODES[] = {
- { "SOFT_LEFT", 1 },
- { "SOFT_RIGHT", 2 },
- { "HOME", 3 },
- { "BACK", 4 },
- { "CALL", 5 },
- { "ENDCALL", 6 },
- { "0", 7 },
- { "1", 8 },
- { "2", 9 },
- { "3", 10 },
- { "4", 11 },
- { "5", 12 },
- { "6", 13 },
- { "7", 14 },
- { "8", 15 },
- { "9", 16 },
- { "STAR", 17 },
- { "POUND", 18 },
- { "DPAD_UP", 19 },
- { "DPAD_DOWN", 20 },
- { "DPAD_LEFT", 21 },
- { "DPAD_RIGHT", 22 },
- { "DPAD_CENTER", 23 },
- { "VOLUME_UP", 24 },
- { "VOLUME_DOWN", 25 },
- { "POWER", 26 },
- { "CAMERA", 27 },
- { "CLEAR", 28 },
- { "A", 29 },
- { "B", 30 },
- { "C", 31 },
- { "D", 32 },
- { "E", 33 },
- { "F", 34 },
- { "G", 35 },
- { "H", 36 },
- { "I", 37 },
- { "J", 38 },
- { "K", 39 },
- { "L", 40 },
- { "M", 41 },
- { "N", 42 },
- { "O", 43 },
- { "P", 44 },
- { "Q", 45 },
- { "R", 46 },
- { "S", 47 },
- { "T", 48 },
- { "U", 49 },
- { "V", 50 },
- { "W", 51 },
- { "X", 52 },
- { "Y", 53 },
- { "Z", 54 },
- { "COMMA", 55 },
- { "PERIOD", 56 },
- { "ALT_LEFT", 57 },
- { "ALT_RIGHT", 58 },
- { "SHIFT_LEFT", 59 },
- { "SHIFT_RIGHT", 60 },
- { "TAB", 61 },
- { "SPACE", 62 },
- { "SYM", 63 },
- { "EXPLORER", 64 },
- { "ENVELOPE", 65 },
- { "ENTER", 66 },
- { "DEL", 67 },
- { "GRAVE", 68 },
- { "MINUS", 69 },
- { "EQUALS", 70 },
- { "LEFT_BRACKET", 71 },
- { "RIGHT_BRACKET", 72 },
- { "BACKSLASH", 73 },
- { "SEMICOLON", 74 },
- { "APOSTROPHE", 75 },
- { "SLASH", 76 },
- { "AT", 77 },
- { "NUM", 78 },
- { "HEADSETHOOK", 79 },
- { "FOCUS", 80 },
- { "PLUS", 81 },
- { "MENU", 82 },
- { "NOTIFICATION", 83 },
- { "SEARCH", 84 },
- { "MEDIA_PLAY_PAUSE", 85 },
- { "MEDIA_STOP", 86 },
- { "MEDIA_NEXT", 87 },
- { "MEDIA_PREVIOUS", 88 },
- { "MEDIA_REWIND", 89 },
- { "MEDIA_FAST_FORWARD", 90 },
- { "MUTE", 91 },
- { "PAGE_UP", 92 },
- { "PAGE_DOWN", 93 },
- { "PICTSYMBOLS", 94 },
- { "SWITCH_CHARSET", 95 },
- { "BUTTON_A", 96 },
- { "BUTTON_B", 97 },
- { "BUTTON_C", 98 },
- { "BUTTON_X", 99 },
- { "BUTTON_Y", 100 },
- { "BUTTON_Z", 101 },
- { "BUTTON_L1", 102 },
- { "BUTTON_R1", 103 },
- { "BUTTON_L2", 104 },
- { "BUTTON_R2", 105 },
- { "BUTTON_THUMBL", 106 },
- { "BUTTON_THUMBR", 107 },
- { "BUTTON_START", 108 },
- { "BUTTON_SELECT", 109 },
- { "BUTTON_MODE", 110 },
- { "ESCAPE", 111 },
- { "FORWARD_DEL", 112 },
- { "CTRL_LEFT", 113 },
- { "CTRL_RIGHT", 114 },
- { "CAPS_LOCK", 115 },
- { "SCROLL_LOCK", 116 },
- { "META_LEFT", 117 },
- { "META_RIGHT", 118 },
- { "FUNCTION", 119 },
- { "SYSRQ", 120 },
- { "BREAK", 121 },
- { "MOVE_HOME", 122 },
- { "MOVE_END", 123 },
- { "INSERT", 124 },
- { "FORWARD", 125 },
- { "MEDIA_PLAY", 126 },
- { "MEDIA_PAUSE", 127 },
- { "MEDIA_CLOSE", 128 },
- { "MEDIA_EJECT", 129 },
- { "MEDIA_RECORD", 130 },
- { "F1", 131 },
- { "F2", 132 },
- { "F3", 133 },
- { "F4", 134 },
- { "F5", 135 },
- { "F6", 136 },
- { "F7", 137 },
- { "F8", 138 },
- { "F9", 139 },
- { "F10", 140 },
- { "F11", 141 },
- { "F12", 142 },
- { "NUM_LOCK", 143 },
- { "NUMPAD_0", 144 },
- { "NUMPAD_1", 145 },
- { "NUMPAD_2", 146 },
- { "NUMPAD_3", 147 },
- { "NUMPAD_4", 148 },
- { "NUMPAD_5", 149 },
- { "NUMPAD_6", 150 },
- { "NUMPAD_7", 151 },
- { "NUMPAD_8", 152 },
- { "NUMPAD_9", 153 },
- { "NUMPAD_DIVIDE", 154 },
- { "NUMPAD_MULTIPLY", 155 },
- { "NUMPAD_SUBTRACT", 156 },
- { "NUMPAD_ADD", 157 },
- { "NUMPAD_DOT", 158 },
- { "NUMPAD_COMMA", 159 },
- { "NUMPAD_ENTER", 160 },
- { "NUMPAD_EQUALS", 161 },
- { "NUMPAD_LEFT_PAREN", 162 },
- { "NUMPAD_RIGHT_PAREN", 163 },
- { "VOLUME_MUTE", 164 },
- { "INFO", 165 },
- { "CHANNEL_UP", 166 },
- { "CHANNEL_DOWN", 167 },
- { "ZOOM_IN", 168 },
- { "ZOOM_OUT", 169 },
- { "TV", 170 },
- { "WINDOW", 171 },
- { "GUIDE", 172 },
- { "DVR", 173 },
- { "BOOKMARK", 174 },
- { "CAPTIONS", 175 },
- { "SETTINGS", 176 },
- { "TV_POWER", 177 },
- { "TV_INPUT", 178 },
- { "STB_POWER", 179 },
- { "STB_INPUT", 180 },
- { "AVR_POWER", 181 },
- { "AVR_INPUT", 182 },
- { "PROG_RED", 183 },
- { "PROG_GREEN", 184 },
- { "PROG_YELLOW", 185 },
- { "PROG_BLUE", 186 },
- { "APP_SWITCH", 187 },
- { "BUTTON_1", 188 },
- { "BUTTON_2", 189 },
- { "BUTTON_3", 190 },
- { "BUTTON_4", 191 },
- { "BUTTON_5", 192 },
- { "BUTTON_6", 193 },
- { "BUTTON_7", 194 },
- { "BUTTON_8", 195 },
- { "BUTTON_9", 196 },
- { "BUTTON_10", 197 },
- { "BUTTON_11", 198 },
- { "BUTTON_12", 199 },
- { "BUTTON_13", 200 },
- { "BUTTON_14", 201 },
- { "BUTTON_15", 202 },
- { "BUTTON_16", 203 },
- { "LANGUAGE_SWITCH", 204 },
- { "MANNER_MODE", 205 },
- { "3D_MODE", 206 },
- { "CONTACTS", 207 },
- { "CALENDAR", 208 },
- { "MUSIC", 209 },
- { "CALCULATOR", 210 },
-
- // NOTE: If you add a new keycode here you must also add it to several other files.
- // Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.
-
- { NULL, 0 }
-};
-
-// NOTE: If you edit these flags, also edit policy flags in Input.h.
-static const KeycodeLabel FLAGS[] = {
- { "WAKE", 0x00000001 },
- { "WAKE_DROPPED", 0x00000002 },
- { "SHIFT", 0x00000004 },
- { "CAPS_LOCK", 0x00000008 },
- { "ALT", 0x00000010 },
- { "ALT_GR", 0x00000020 },
- { "MENU", 0x00000040 },
- { "LAUNCHER", 0x00000080 },
- { "VIRTUAL", 0x00000100 },
- { "FUNCTION", 0x00000200 },
- { NULL, 0 }
-};
-
-static const KeycodeLabel AXES[] = {
- { "X", 0 },
- { "Y", 1 },
- { "PRESSURE", 2 },
- { "SIZE", 3 },
- { "TOUCH_MAJOR", 4 },
- { "TOUCH_MINOR", 5 },
- { "TOOL_MAJOR", 6 },
- { "TOOL_MINOR", 7 },
- { "ORIENTATION", 8 },
- { "VSCROLL", 9 },
- { "HSCROLL", 10 },
- { "Z", 11 },
- { "RX", 12 },
- { "RY", 13 },
- { "RZ", 14 },
- { "HAT_X", 15 },
- { "HAT_Y", 16 },
- { "LTRIGGER", 17 },
- { "RTRIGGER", 18 },
- { "THROTTLE", 19 },
- { "RUDDER", 20 },
- { "WHEEL", 21 },
- { "GAS", 22 },
- { "BRAKE", 23 },
- { "DISTANCE", 24 },
- { "TILT", 25 },
- { "GENERIC_1", 32 },
- { "GENERIC_2", 33 },
- { "GENERIC_3", 34 },
- { "GENERIC_4", 35 },
- { "GENERIC_5", 36 },
- { "GENERIC_6", 37 },
- { "GENERIC_7", 38 },
- { "GENERIC_8", 39 },
- { "GENERIC_9", 40 },
- { "GENERIC_10", 41 },
- { "GENERIC_11", 42 },
- { "GENERIC_12", 43 },
- { "GENERIC_13", 44 },
- { "GENERIC_14", 45 },
- { "GENERIC_15", 46 },
- { "GENERIC_16", 47 },
-
- // NOTE: If you add a new axis here you must also add it to several other files.
- // Refer to frameworks/base/core/java/android/view/MotionEvent.java for the full list.
-
- { NULL, -1 }
-};
-
-#endif // _UI_KEYCODE_LABELS_H
diff --git a/include/ui/PowerManager.h b/include/ui/PowerManager.h
deleted file mode 100644
index dd80318..0000000
--- a/include/ui/PowerManager.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#ifndef _UI_POWER_MANAGER_H
-#define _UI_POWER_MANAGER_H
-
-
-namespace android {
-
-enum {
- POWER_MANAGER_OTHER_EVENT = 0,
- POWER_MANAGER_BUTTON_EVENT = 1,
- POWER_MANAGER_TOUCH_EVENT = 2,
-
- POWER_MANAGER_LAST_EVENT = POWER_MANAGER_TOUCH_EVENT, // Last valid event code.
-};
-
-} // namespace android
-
-#endif // _UI_POWER_MANAGER_H
diff --git a/include/ui/VirtualKeyMap.h b/include/ui/VirtualKeyMap.h
deleted file mode 100644
index 7813d9d..0000000
--- a/include/ui/VirtualKeyMap.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#ifndef _UI_VIRTUAL_KEY_MAP_H
-#define _UI_VIRTUAL_KEY_MAP_H
-
-#include <stdint.h>
-
-#include <ui/Input.h>
-#include <utils/Errors.h>
-#include <utils/KeyedVector.h>
-#include <utils/Tokenizer.h>
-#include <utils/String8.h>
-#include <utils/Unicode.h>
-
-namespace android {
-
-/* Describes a virtual key. */
-struct VirtualKeyDefinition {
- int32_t scanCode;
-
- // configured position data, specified in display coords
- int32_t centerX;
- int32_t centerY;
- int32_t width;
- int32_t height;
-};
-
-
-/**
- * Describes a collection of virtual keys on a touch screen in terms of
- * virtual scan codes and hit rectangles.
- */
-class VirtualKeyMap {
-public:
- ~VirtualKeyMap();
-
- static status_t load(const String8& filename, VirtualKeyMap** outMap);
-
- inline const Vector<VirtualKeyDefinition>& getVirtualKeys() const {
- return mVirtualKeys;
- }
-
-private:
- class Parser {
- VirtualKeyMap* mMap;
- Tokenizer* mTokenizer;
-
- public:
- Parser(VirtualKeyMap* map, Tokenizer* tokenizer);
- ~Parser();
- status_t parse();
-
- private:
- bool consumeFieldDelimiterAndSkipWhitespace();
- bool parseNextIntField(int32_t* outValue);
- };
-
- Vector<VirtualKeyDefinition> mVirtualKeys;
-
- VirtualKeyMap();
-};
-
-} // namespace android
-
-#endif // _UI_KEY_CHARACTER_MAP_H
diff --git a/include/utils/Asset.h b/include/utils/Asset.h
deleted file mode 100644
index 1fe0e06..0000000
--- a/include/utils/Asset.h
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Copyright (C) 2006 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.
- */
-
-//
-// Class providing access to a read-only asset. Asset objects are NOT
-// thread-safe, and should not be shared across threads.
-//
-#ifndef __LIBS_ASSET_H
-#define __LIBS_ASSET_H
-
-#include <stdio.h>
-#include <sys/types.h>
-
-#include <utils/Compat.h>
-#include <utils/Errors.h>
-#include <utils/FileMap.h>
-#include <utils/String8.h>
-
-namespace android {
-
-/*
- * Instances of this class provide read-only operations on a byte stream.
- *
- * Access may be optimized for streaming, random, or whole buffer modes. All
- * operations are supported regardless of how the file was opened, but some
- * things will be less efficient. [pass that in??]
- *
- * "Asset" is the base class for all types of assets. The classes below
- * provide most of the implementation. The AssetManager uses one of the
- * static "create" functions defined here to create a new instance.
- */
-class Asset {
-public:
- virtual ~Asset(void);
-
- static int32_t getGlobalCount();
- static String8 getAssetAllocations();
-
- /* used when opening an asset */
- typedef enum AccessMode {
- ACCESS_UNKNOWN = 0,
-
- /* read chunks, and seek forward and backward */
- ACCESS_RANDOM,
-
- /* read sequentially, with an occasional forward seek */
- ACCESS_STREAMING,
-
- /* caller plans to ask for a read-only buffer with all data */
- ACCESS_BUFFER,
- } AccessMode;
-
- /*
- * Read data from the current offset. Returns the actual number of
- * bytes read, 0 on EOF, or -1 on error.
- */
- virtual ssize_t read(void* buf, size_t count) = 0;
-
- /*
- * Seek to the specified offset. "whence" uses the same values as
- * lseek/fseek. Returns the new position on success, or (off64_t) -1
- * on failure.
- */
- virtual off64_t seek(off64_t offset, int whence) = 0;
-
- /*
- * Close the asset, freeing all associated resources.
- */
- virtual void close(void) = 0;
-
- /*
- * Get a pointer to a buffer with the entire contents of the file.
- */
- virtual const void* getBuffer(bool wordAligned) = 0;
-
- /*
- * Get the total amount of data that can be read.
- */
- virtual off64_t getLength(void) const = 0;
-
- /*
- * Get the total amount of data that can be read from the current position.
- */
- virtual off64_t getRemainingLength(void) const = 0;
-
- /*
- * Open a new file descriptor that can be used to read this asset.
- * Returns -1 if you can not use the file descriptor (for example if the
- * asset is compressed).
- */
- virtual int openFileDescriptor(off64_t* outStart, off64_t* outLength) const = 0;
-
- /*
- * Return whether this asset's buffer is allocated in RAM (not mmapped).
- * Note: not virtual so it is safe to call even when being destroyed.
- */
- virtual bool isAllocated(void) const { return false; }
-
- /*
- * Get a string identifying the asset's source. This might be a full
- * path, it might be a colon-separated list of identifiers.
- *
- * This is NOT intended to be used for anything except debug output.
- * DO NOT try to parse this or use it to open a file.
- */
- const char* getAssetSource(void) const { return mAssetSource.string(); }
-
-protected:
- Asset(void); // constructor; only invoked indirectly
-
- /* handle common seek() housekeeping */
- off64_t handleSeek(off64_t offset, int whence, off64_t curPosn, off64_t maxPosn);
-
- /* set the asset source string */
- void setAssetSource(const String8& path) { mAssetSource = path; }
-
- AccessMode getAccessMode(void) const { return mAccessMode; }
-
-private:
- /* these operations are not implemented */
- Asset(const Asset& src);
- Asset& operator=(const Asset& src);
-
- /* AssetManager needs access to our "create" functions */
- friend class AssetManager;
-
- /*
- * Create the asset from a named file on disk.
- */
- static Asset* createFromFile(const char* fileName, AccessMode mode);
-
- /*
- * Create the asset from a named, compressed file on disk (e.g. ".gz").
- */
- static Asset* createFromCompressedFile(const char* fileName,
- AccessMode mode);
-
-#if 0
- /*
- * Create the asset from a segment of an open file. This will fail
- * if "offset" and "length" don't fit within the bounds of the file.
- *
- * The asset takes ownership of the file descriptor.
- */
- static Asset* createFromFileSegment(int fd, off64_t offset, size_t length,
- AccessMode mode);
-
- /*
- * Create from compressed data. "fd" should be seeked to the start of
- * the compressed data. This could be inside a gzip file or part of a
- * Zip archive.
- *
- * The asset takes ownership of the file descriptor.
- *
- * This may not verify the validity of the compressed data until first
- * use.
- */
- static Asset* createFromCompressedData(int fd, off64_t offset,
- int compressionMethod, size_t compressedLength,
- size_t uncompressedLength, AccessMode mode);
-#endif
-
- /*
- * Create the asset from a memory-mapped file segment.
- *
- * The asset takes ownership of the FileMap.
- */
- static Asset* createFromUncompressedMap(FileMap* dataMap, AccessMode mode);
-
- /*
- * Create the asset from a memory-mapped file segment with compressed
- * data. "method" is a Zip archive compression method constant.
- *
- * The asset takes ownership of the FileMap.
- */
- static Asset* createFromCompressedMap(FileMap* dataMap, int method,
- size_t uncompressedLen, AccessMode mode);
-
-
- /*
- * Create from a reference-counted chunk of shared memory.
- */
- // TODO
-
- AccessMode mAccessMode; // how the asset was opened
- String8 mAssetSource; // debug string
-
- Asset* mNext; // linked list.
- Asset* mPrev;
-};
-
-
-/*
- * ===========================================================================
- *
- * Innards follow. Do not use these classes directly.
- */
-
-/*
- * An asset based on an uncompressed file on disk. It may encompass the
- * entire file or just a piece of it. Access is through fread/fseek.
- */
-class _FileAsset : public Asset {
-public:
- _FileAsset(void);
- virtual ~_FileAsset(void);
-
- /*
- * Use a piece of an already-open file.
- *
- * On success, the object takes ownership of "fd".
- */
- status_t openChunk(const char* fileName, int fd, off64_t offset, size_t length);
-
- /*
- * Use a memory-mapped region.
- *
- * On success, the object takes ownership of "dataMap".
- */
- status_t openChunk(FileMap* dataMap);
-
- /*
- * Standard Asset interfaces.
- */
- virtual ssize_t read(void* buf, size_t count);
- virtual off64_t seek(off64_t offset, int whence);
- virtual void close(void);
- virtual const void* getBuffer(bool wordAligned);
- virtual off64_t getLength(void) const { return mLength; }
- virtual off64_t getRemainingLength(void) const { return mLength-mOffset; }
- virtual int openFileDescriptor(off64_t* outStart, off64_t* outLength) const;
- virtual bool isAllocated(void) const { return mBuf != NULL; }
-
-private:
- off64_t mStart; // absolute file offset of start of chunk
- off64_t mLength; // length of the chunk
- off64_t mOffset; // current local offset, 0 == mStart
- FILE* mFp; // for read/seek
- char* mFileName; // for opening
-
- /*
- * To support getBuffer() we either need to read the entire thing into
- * a buffer or memory-map it. For small files it's probably best to
- * just read them in.
- */
- enum { kReadVsMapThreshold = 4096 };
-
- FileMap* mMap; // for memory map
- unsigned char* mBuf; // for read
-
- const void* ensureAlignment(FileMap* map);
-};
-
-
-/*
- * An asset based on compressed data in a file.
- */
-class _CompressedAsset : public Asset {
-public:
- _CompressedAsset(void);
- virtual ~_CompressedAsset(void);
-
- /*
- * Use a piece of an already-open file.
- *
- * On success, the object takes ownership of "fd".
- */
- status_t openChunk(int fd, off64_t offset, int compressionMethod,
- size_t uncompressedLen, size_t compressedLen);
-
- /*
- * Use a memory-mapped region.
- *
- * On success, the object takes ownership of "fd".
- */
- status_t openChunk(FileMap* dataMap, int compressionMethod,
- size_t uncompressedLen);
-
- /*
- * Standard Asset interfaces.
- */
- virtual ssize_t read(void* buf, size_t count);
- virtual off64_t seek(off64_t offset, int whence);
- virtual void close(void);
- virtual const void* getBuffer(bool wordAligned);
- virtual off64_t getLength(void) const { return mUncompressedLen; }
- virtual off64_t getRemainingLength(void) const { return mUncompressedLen-mOffset; }
- virtual int openFileDescriptor(off64_t* outStart, off64_t* outLength) const { return -1; }
- virtual bool isAllocated(void) const { return mBuf != NULL; }
-
-private:
- off64_t mStart; // offset to start of compressed data
- off64_t mCompressedLen; // length of the compressed data
- off64_t mUncompressedLen; // length of the uncompressed data
- off64_t mOffset; // current offset, 0 == start of uncomp data
-
- FileMap* mMap; // for memory-mapped input
- int mFd; // for file input
-
- class StreamingZipInflater* mZipInflater; // for streaming large compressed assets
-
- unsigned char* mBuf; // for getBuffer()
-};
-
-// need: shared mmap version?
-
-}; // namespace android
-
-#endif // __LIBS_ASSET_H
diff --git a/include/utils/AssetDir.h b/include/utils/AssetDir.h
deleted file mode 100644
index abf8a35..0000000
--- a/include/utils/AssetDir.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (C) 2006 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.
- */
-
-//
-// Access a chunk of the asset hierarchy as if it were a single directory.
-//
-#ifndef __LIBS_ASSETDIR_H
-#define __LIBS_ASSETDIR_H
-
-#include <utils/String8.h>
-#include <utils/Vector.h>
-#include <utils/SortedVector.h>
-#include <utils/misc.h>
-#include <sys/types.h>
-
-namespace android {
-
-/*
- * This provides vector-style access to a directory. We do this rather
- * than modeling opendir/readdir access because it's simpler and the
- * nature of the operation requires us to have all data on hand anyway.
- *
- * The list of files will be sorted in ascending order by ASCII value.
- *
- * The contents are populated by our friend, the AssetManager.
- */
-class AssetDir {
-public:
- AssetDir(void)
- : mFileInfo(NULL)
- {}
- virtual ~AssetDir(void) {
- delete mFileInfo;
- }
-
- /*
- * Vector-style access.
- */
- size_t getFileCount(void) { return mFileInfo->size(); }
- const String8& getFileName(int idx) {
- return mFileInfo->itemAt(idx).getFileName();
- }
- const String8& getSourceName(int idx) {
- return mFileInfo->itemAt(idx).getSourceName();
- }
-
- /*
- * Get the type of a file (usually regular or directory).
- */
- FileType getFileType(int idx) {
- return mFileInfo->itemAt(idx).getFileType();
- }
-
-private:
- /* these operations are not implemented */
- AssetDir(const AssetDir& src);
- const AssetDir& operator=(const AssetDir& src);
-
- friend class AssetManager;
-
- /*
- * This holds information about files in the asset hierarchy.
- */
- class FileInfo {
- public:
- FileInfo(void) {}
- FileInfo(const String8& path) // useful for e.g. svect.indexOf
- : mFileName(path), mFileType(kFileTypeUnknown)
- {}
- ~FileInfo(void) {}
- FileInfo(const FileInfo& src) {
- copyMembers(src);
- }
- const FileInfo& operator= (const FileInfo& src) {
- if (this != &src)
- copyMembers(src);
- return *this;
- }
-
- void copyMembers(const FileInfo& src) {
- mFileName = src.mFileName;
- mFileType = src.mFileType;
- mSourceName = src.mSourceName;
- }
-
- /* need this for SortedVector; must compare only on file name */
- bool operator< (const FileInfo& rhs) const {
- return mFileName < rhs.mFileName;
- }
-
- /* used by AssetManager */
- bool operator== (const FileInfo& rhs) const {
- return mFileName == rhs.mFileName;
- }
-
- void set(const String8& path, FileType type) {
- mFileName = path;
- mFileType = type;
- }
-
- const String8& getFileName(void) const { return mFileName; }
- void setFileName(const String8& path) { mFileName = path; }
-
- FileType getFileType(void) const { return mFileType; }
- void setFileType(FileType type) { mFileType = type; }
-
- const String8& getSourceName(void) const { return mSourceName; }
- void setSourceName(const String8& path) { mSourceName = path; }
-
- /*
- * Handy utility for finding an entry in a sorted vector of FileInfo.
- * Returns the index of the matching entry, or -1 if none found.
- */
- static int findEntry(const SortedVector<FileInfo>* pVector,
- const String8& fileName);
-
- private:
- String8 mFileName; // filename only
- FileType mFileType; // regular, directory, etc
-
- String8 mSourceName; // currently debug-only
- };
-
- /* AssetManager uses this to initialize us */
- void setFileList(SortedVector<FileInfo>* list) { mFileInfo = list; }
-
- SortedVector<FileInfo>* mFileInfo;
-};
-
-}; // namespace android
-
-#endif // __LIBS_ASSETDIR_H
diff --git a/include/utils/AssetManager.h b/include/utils/AssetManager.h
deleted file mode 100644
index a8c7ddb..0000000
--- a/include/utils/AssetManager.h
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- * Copyright (C) 2006 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.
- */
-
-//
-// Asset management class. AssetManager objects are thread-safe.
-//
-#ifndef __LIBS_ASSETMANAGER_H
-#define __LIBS_ASSETMANAGER_H
-
-#include <utils/Asset.h>
-#include <utils/AssetDir.h>
-#include <utils/KeyedVector.h>
-#include <utils/String8.h>
-#include <utils/Vector.h>
-#include <utils/String16.h>
-#include <utils/ZipFileRO.h>
-#include <utils/threads.h>
-
-/*
- * Native-app access is via the opaque typedef struct AAssetManager in the C namespace.
- */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct AAssetManager { };
-
-#ifdef __cplusplus
-};
-#endif
-
-
-/*
- * Now the proper C++ android-namespace definitions
- */
-
-namespace android {
-
-class Asset; // fwd decl for things that include Asset.h first
-class ResTable;
-struct ResTable_config;
-
-/*
- * Every application that uses assets needs one instance of this. A
- * single instance may be shared across multiple threads, and a single
- * thread may have more than one instance (the latter is discouraged).
- *
- * The purpose of the AssetManager is to create Asset objects. To do
- * this efficiently it may cache information about the locations of
- * files it has seen. This can be controlled with the "cacheMode"
- * argument.
- *
- * The asset hierarchy may be examined like a filesystem, using
- * AssetDir objects to peruse a single directory.
- */
-class AssetManager : public AAssetManager {
-public:
- typedef enum CacheMode {
- CACHE_UNKNOWN = 0,
- CACHE_OFF, // don't try to cache file locations
- CACHE_DEFER, // construct cache as pieces are needed
- //CACHE_SCAN, // scan full(!) asset hierarchy at init() time
- } CacheMode;
-
- AssetManager(CacheMode cacheMode = CACHE_OFF);
- virtual ~AssetManager(void);
-
- static int32_t getGlobalCount();
-
- /*
- * Add a new source for assets. This can be called multiple times to
- * look in multiple places for assets. It can be either a directory (for
- * finding assets as raw files on the disk) or a ZIP file. This newly
- * added asset path will be examined first when searching for assets,
- * before any that were previously added.
- *
- * Returns "true" on success, "false" on failure. If 'cookie' is non-NULL,
- * then on success, *cookie is set to the value corresponding to the
- * newly-added asset source.
- */
- bool addAssetPath(const String8& path, void** cookie);
-
- /*
- * Convenience for adding the standard system assets. Uses the
- * ANDROID_ROOT environment variable to find them.
- */
- bool addDefaultAssets();
-
- /*
- * Iterate over the asset paths in this manager. (Previously
- * added via addAssetPath() and addDefaultAssets().) On first call,
- * 'cookie' must be NULL, resulting in the first cookie being returned.
- * Each next cookie will be returned there-after, until NULL indicating
- * the end has been reached.
- */
- void* nextAssetPath(void* cookie) const;
-
- /*
- * Return an asset path in the manager. 'which' must be between 0 and
- * countAssetPaths().
- */
- String8 getAssetPath(void* cookie) const;
-
- /*
- * Set the current locale and vendor. The locale can change during
- * the lifetime of an AssetManager if the user updates the device's
- * language setting. The vendor is less likely to change.
- *
- * Pass in NULL to indicate no preference.
- */
- void setLocale(const char* locale);
- void setVendor(const char* vendor);
-
- /*
- * Choose screen orientation for resources values returned.
- */
- void setConfiguration(const ResTable_config& config, const char* locale = NULL);
-
- void getConfiguration(ResTable_config* outConfig) const;
-
- typedef Asset::AccessMode AccessMode; // typing shortcut
-
- /*
- * Open an asset.
- *
- * This will search through locale-specific and vendor-specific
- * directories and packages to find the file.
- *
- * The object returned does not depend on the AssetManager. It should
- * be freed by calling Asset::close().
- */
- Asset* open(const char* fileName, AccessMode mode);
-
- /*
- * Open a non-asset file as an asset.
- *
- * This is for opening files that are included in an asset package
- * but aren't assets. These sit outside the usual "locale/vendor"
- * path hierarchy, and will not be seen by "AssetDir" or included
- * in our filename cache.
- */
- Asset* openNonAsset(const char* fileName, AccessMode mode);
-
- /*
- * Explicit non-asset file. The file explicitly named by the cookie (the
- * resource set to look in) and fileName will be opened and returned.
- */
- Asset* openNonAsset(void* cookie, const char* fileName, AccessMode mode);
-
- /*
- * Open a directory within the asset hierarchy.
- *
- * The contents of the directory are an amalgam of vendor-specific,
- * locale-specific, and generic assets stored loosely or in asset
- * packages. Depending on the cache setting and previous accesses,
- * this call may incur significant disk overhead.
- *
- * To open the top-level directory, pass in "".
- */
- AssetDir* openDir(const char* dirName);
-
- /*
- * Open a directory within a particular path of the asset manager.
- *
- * The contents of the directory are an amalgam of vendor-specific,
- * locale-specific, and generic assets stored loosely or in asset
- * packages. Depending on the cache setting and previous accesses,
- * this call may incur significant disk overhead.
- *
- * To open the top-level directory, pass in "".
- */
- AssetDir* openNonAssetDir(void* cookie, const char* dirName);
-
- /*
- * Get the type of a file in the asset hierarchy. They will either
- * be "regular" or "directory". [Currently only works for "regular".]
- *
- * Can also be used as a quick test for existence of a file.
- */
- FileType getFileType(const char* fileName);
-
- /*
- * Return the complete resource table to find things in the package.
- */
- const ResTable& getResources(bool required = true) const;
-
- /*
- * Discard cached filename information. This only needs to be called
- * if somebody has updated the set of "loose" files, and we want to
- * discard our cached notion of what's where.
- */
- void purge(void) { purgeFileNameCacheLocked(); }
-
- /*
- * Return true if the files this AssetManager references are all
- * up-to-date (have not been changed since it was created). If false
- * is returned, you will need to create a new AssetManager to get
- * the current data.
- */
- bool isUpToDate();
-
- /**
- * Get the known locales for this asset manager object.
- */
- void getLocales(Vector<String8>* locales) const;
-
-private:
- struct asset_path
- {
- String8 path;
- FileType type;
- String8 idmap;
- };
-
- Asset* openInPathLocked(const char* fileName, AccessMode mode,
- const asset_path& path);
- Asset* openNonAssetInPathLocked(const char* fileName, AccessMode mode,
- const asset_path& path);
- Asset* openInLocaleVendorLocked(const char* fileName, AccessMode mode,
- const asset_path& path, const char* locale, const char* vendor);
- String8 createPathNameLocked(const asset_path& path, const char* locale,
- const char* vendor);
- String8 createPathNameLocked(const asset_path& path, const char* rootDir);
- String8 createZipSourceNameLocked(const String8& zipFileName,
- const String8& dirName, const String8& fileName);
-
- ZipFileRO* getZipFileLocked(const asset_path& path);
- Asset* openAssetFromFileLocked(const String8& fileName, AccessMode mode);
- Asset* openAssetFromZipLocked(const ZipFileRO* pZipFile,
- const ZipEntryRO entry, AccessMode mode, const String8& entryName);
-
- bool scanAndMergeDirLocked(SortedVector<AssetDir::FileInfo>* pMergedInfo,
- const asset_path& path, const char* rootDir, const char* dirName);
- SortedVector<AssetDir::FileInfo>* scanDirLocked(const String8& path);
- bool scanAndMergeZipLocked(SortedVector<AssetDir::FileInfo>* pMergedInfo,
- const asset_path& path, const char* rootDir, const char* dirName);
- void mergeInfoLocked(SortedVector<AssetDir::FileInfo>* pMergedInfo,
- const SortedVector<AssetDir::FileInfo>* pContents);
-
- void loadFileNameCacheLocked(void);
- void fncScanLocked(SortedVector<AssetDir::FileInfo>* pMergedInfo,
- const char* dirName);
- bool fncScanAndMergeDirLocked(
- SortedVector<AssetDir::FileInfo>* pMergedInfo,
- const asset_path& path, const char* locale, const char* vendor,
- const char* dirName);
- void purgeFileNameCacheLocked(void);
-
- const ResTable* getResTable(bool required = true) const;
- void setLocaleLocked(const char* locale);
- void updateResourceParamsLocked() const;
-
- bool createIdmapFileLocked(const String8& originalPath, const String8& overlayPath,
- const String8& idmapPath);
-
- bool isIdmapStaleLocked(const String8& originalPath, const String8& overlayPath,
- const String8& idmapPath);
-
- Asset* openIdmapLocked(const struct asset_path& ap) const;
-
- bool getZipEntryCrcLocked(const String8& zipPath, const char* entryFilename, uint32_t* pCrc);
-
- class SharedZip : public RefBase {
- public:
- static sp<SharedZip> get(const String8& path);
-
- ZipFileRO* getZip();
-
- Asset* getResourceTableAsset();
- Asset* setResourceTableAsset(Asset* asset);
-
- ResTable* getResourceTable();
- ResTable* setResourceTable(ResTable* res);
-
- bool isUpToDate();
-
- protected:
- ~SharedZip();
-
- private:
- SharedZip(const String8& path, time_t modWhen);
- SharedZip(); // <-- not implemented
-
- String8 mPath;
- ZipFileRO* mZipFile;
- time_t mModWhen;
-
- Asset* mResourceTableAsset;
- ResTable* mResourceTable;
-
- static Mutex gLock;
- static DefaultKeyedVector<String8, wp<SharedZip> > gOpen;
- };
-
- /*
- * Manage a set of Zip files. For each file we need a pointer to the
- * ZipFile and a time_t with the file's modification date.
- *
- * We currently only have two zip files (current app, "common" app).
- * (This was originally written for 8, based on app/locale/vendor.)
- */
- class ZipSet {
- public:
- ZipSet(void);
- ~ZipSet(void);
-
- /*
- * Return a ZipFileRO structure for a ZipFileRO with the specified
- * parameters.
- */
- ZipFileRO* getZip(const String8& path);
-
- Asset* getZipResourceTableAsset(const String8& path);
- Asset* setZipResourceTableAsset(const String8& path, Asset* asset);
-
- ResTable* getZipResourceTable(const String8& path);
- ResTable* setZipResourceTable(const String8& path, ResTable* res);
-
- // generate path, e.g. "common/en-US-noogle.zip"
- static String8 getPathName(const char* path);
-
- bool isUpToDate();
-
- private:
- void closeZip(int idx);
-
- int getIndex(const String8& zip) const;
- mutable Vector<String8> mZipPath;
- mutable Vector<sp<SharedZip> > mZipFile;
- };
-
- // Protect all internal state.
- mutable Mutex mLock;
-
- ZipSet mZipSet;
-
- Vector<asset_path> mAssetPaths;
- char* mLocale;
- char* mVendor;
-
- mutable ResTable* mResources;
- ResTable_config* mConfig;
-
- /*
- * Cached data for "loose" files. This lets us avoid poking at the
- * filesystem when searching for loose assets. Each entry is the
- * "extended partial" path, e.g. "default/default/foo/bar.txt". The
- * full set of files is present, including ".EXCLUDE" entries.
- *
- * We do not cache directory names. We don't retain the ".gz",
- * because to our clients "foo" and "foo.gz" both look like "foo".
- */
- CacheMode mCacheMode; // is the cache enabled?
- bool mCacheValid; // clear when locale or vendor changes
- SortedVector<AssetDir::FileInfo> mCache;
-};
-
-}; // namespace android
-
-#endif // __LIBS_ASSETMANAGER_H
diff --git a/include/utils/BackupHelpers.h b/include/utils/BackupHelpers.h
deleted file mode 100644
index 1bb04a7..0000000
--- a/include/utils/BackupHelpers.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-#ifndef _UTILS_BACKUP_HELPERS_H
-#define _UTILS_BACKUP_HELPERS_H
-
-#include <utils/Errors.h>
-#include <utils/String8.h>
-#include <utils/KeyedVector.h>
-
-namespace android {
-
-enum {
- BACKUP_HEADER_ENTITY_V1 = 0x61746144, // Data (little endian)
-};
-
-typedef struct {
- int type; // BACKUP_HEADER_ENTITY_V1
- int keyLen; // length of the key name, not including the null terminator
- int dataSize; // size of the data, not including the padding, -1 means delete
-} entity_header_v1;
-
-struct SnapshotHeader {
- int magic0;
- int fileCount;
- int magic1;
- int totalSize;
-};
-
-struct FileState {
- int modTime_sec;
- int modTime_nsec;
- int mode;
- int size;
- int crc32;
- int nameLen;
-};
-
-struct FileRec {
- String8 file;
- bool deleted;
- FileState s;
-};
-
-
-/**
- * Writes the data.
- *
- * If an error occurs, it poisons this object and all write calls will fail
- * with the error that occurred.
- */
-class BackupDataWriter
-{
-public:
- BackupDataWriter(int fd);
- // does not close fd
- ~BackupDataWriter();
-
- status_t WriteEntityHeader(const String8& key, size_t dataSize);
-
- /* Note: WriteEntityData will write arbitrary data into the file without
- * validation or a previously-supplied header. The full backup implementation
- * uses it this way to generate a controlled binary stream that is not
- * entity-structured. If the implementation here is changed, either this
- * use case must remain valid, or the full backup implementation should be
- * adjusted to use some other appropriate mechanism.
- */
- status_t WriteEntityData(const void* data, size_t size);
-
- void SetKeyPrefix(const String8& keyPrefix);
-
-private:
- explicit BackupDataWriter();
- status_t write_padding_for(int n);
-
- int m_fd;
- status_t m_status;
- ssize_t m_pos;
- int m_entityCount;
- String8 m_keyPrefix;
-};
-
-/**
- * Reads the data.
- *
- * If an error occurs, it poisons this object and all write calls will fail
- * with the error that occurred.
- */
-class BackupDataReader
-{
-public:
- BackupDataReader(int fd);
- // does not close fd
- ~BackupDataReader();
-
- status_t Status();
- status_t ReadNextHeader(bool* done, int* type);
-
- bool HasEntities();
- status_t ReadEntityHeader(String8* key, size_t* dataSize);
- status_t SkipEntityData(); // must be called with the pointer at the beginning of the data.
- ssize_t ReadEntityData(void* data, size_t size);
-
-private:
- explicit BackupDataReader();
- status_t skip_padding();
-
- int m_fd;
- bool m_done;
- status_t m_status;
- ssize_t m_pos;
- ssize_t m_dataEndPos;
- int m_entityCount;
- union {
- int type;
- entity_header_v1 entity;
- } m_header;
- String8 m_key;
-};
-
-int back_up_files(int oldSnapshotFD, BackupDataWriter* dataStream, int newSnapshotFD,
- char const* const* files, char const* const *keys, int fileCount);
-
-int write_tarfile(const String8& packageName, const String8& domain,
- const String8& rootPath, const String8& filePath, BackupDataWriter* outputStream);
-
-class RestoreHelperBase
-{
-public:
- RestoreHelperBase();
- ~RestoreHelperBase();
-
- status_t WriteFile(const String8& filename, BackupDataReader* in);
- status_t WriteSnapshot(int fd);
-
-private:
- void* m_buf;
- bool m_loggedUnknownMetadata;
- KeyedVector<String8,FileRec> m_files;
-};
-
-#define TEST_BACKUP_HELPERS 1
-
-#if TEST_BACKUP_HELPERS
-int backup_helper_test_empty();
-int backup_helper_test_four();
-int backup_helper_test_files();
-int backup_helper_test_null_base();
-int backup_helper_test_missing_file();
-int backup_helper_test_data_writer();
-int backup_helper_test_data_reader();
-#endif
-
-} // namespace android
-
-#endif // _UTILS_BACKUP_HELPERS_H
diff --git a/include/utils/KeyedVector.h b/include/utils/KeyedVector.h
index 6bcdea4..fcc3bcf 100644
--- a/include/utils/KeyedVector.h
+++ b/include/utils/KeyedVector.h
@@ -66,7 +66,7 @@
ssize_t indexOfKey(const KEY& key) const;
/*!
- * modifing the array
+ * modifying the array
*/
VALUE& editValueFor(const KEY& key);
diff --git a/include/utils/ObbFile.h b/include/utils/ObbFile.h
deleted file mode 100644
index 47559cd..0000000
--- a/include/utils/ObbFile.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#ifndef OBBFILE_H_
-#define OBBFILE_H_
-
-#include <stdint.h>
-#include <strings.h>
-
-#include <utils/RefBase.h>
-#include <utils/String8.h>
-
-namespace android {
-
-// OBB flags (bit 0)
-#define OBB_OVERLAY (1 << 0)
-#define OBB_SALTED (1 << 1)
-
-class ObbFile : public RefBase {
-protected:
- virtual ~ObbFile();
-
-public:
- ObbFile();
-
- bool readFrom(const char* filename);
- bool readFrom(int fd);
- bool writeTo(const char* filename);
- bool writeTo(int fd);
- bool removeFrom(const char* filename);
- bool removeFrom(int fd);
-
- const char* getFileName() const {
- return mFileName;
- }
-
- const String8 getPackageName() const {
- return mPackageName;
- }
-
- void setPackageName(String8 packageName) {
- mPackageName = packageName;
- }
-
- int32_t getVersion() const {
- return mVersion;
- }
-
- void setVersion(int32_t version) {
- mVersion = version;
- }
-
- int32_t getFlags() const {
- return mFlags;
- }
-
- void setFlags(int32_t flags) {
- mFlags = flags;
- }
-
- const unsigned char* getSalt(size_t* length) const {
- if ((mFlags & OBB_SALTED) == 0) {
- *length = 0;
- return NULL;
- }
-
- *length = sizeof(mSalt);
- return mSalt;
- }
-
- bool setSalt(const unsigned char* salt, size_t length) {
- if (length != sizeof(mSalt)) {
- return false;
- }
-
- memcpy(mSalt, salt, sizeof(mSalt));
- mFlags |= OBB_SALTED;
- return true;
- }
-
- bool isOverlay() {
- return (mFlags & OBB_OVERLAY) == OBB_OVERLAY;
- }
-
- void setOverlay(bool overlay) {
- if (overlay) {
- mFlags |= OBB_OVERLAY;
- } else {
- mFlags &= ~OBB_OVERLAY;
- }
- }
-
- static inline uint32_t get4LE(const unsigned char* buf) {
- return buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24);
- }
-
- static inline void put4LE(unsigned char* buf, uint32_t val) {
- buf[0] = val & 0xFF;
- buf[1] = (val >> 8) & 0xFF;
- buf[2] = (val >> 16) & 0xFF;
- buf[3] = (val >> 24) & 0xFF;
- }
-
-private:
- /* Package name this ObbFile is associated with */
- String8 mPackageName;
-
- /* Package version this ObbFile is associated with */
- int32_t mVersion;
-
- /* Flags for this OBB type. */
- int32_t mFlags;
-
- /* Whether the file is salted. */
- bool mSalted;
-
- /* The encryption salt. */
- unsigned char mSalt[8];
-
- const char* mFileName;
-
- size_t mFileSize;
-
- size_t mFooterStart;
-
- unsigned char* mReadBuf;
-
- bool parseObbFile(int fd);
-};
-
-}
-#endif /* OBBFILE_H_ */
diff --git a/include/utils/ResourceTypes.h b/include/utils/ResourceTypes.h
deleted file mode 100644
index c496da6..0000000
--- a/include/utils/ResourceTypes.h
+++ /dev/null
@@ -1,1592 +0,0 @@
-/*
- * Copyright (C) 2005 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.
- */
-
-//
-// Definitions of resource data structures.
-//
-#ifndef _LIBS_UTILS_RESOURCE_TYPES_H
-#define _LIBS_UTILS_RESOURCE_TYPES_H
-
-#include <utils/Asset.h>
-#include <utils/ByteOrder.h>
-#include <utils/Errors.h>
-#include <utils/String16.h>
-#include <utils/Vector.h>
-
-#include <utils/threads.h>
-
-#include <stdint.h>
-#include <sys/types.h>
-
-#include <android/configuration.h>
-
-namespace android {
-
-/** ********************************************************************
- * PNG Extensions
- *
- * New private chunks that may be placed in PNG images.
- *
- *********************************************************************** */
-
-/**
- * This chunk specifies how to split an image into segments for
- * scaling.
- *
- * There are J horizontal and K vertical segments. These segments divide
- * the image into J*K regions as follows (where J=4 and K=3):
- *
- * F0 S0 F1 S1
- * +-----+----+------+-------+
- * S2| 0 | 1 | 2 | 3 |
- * +-----+----+------+-------+
- * | | | | |
- * | | | | |
- * F2| 4 | 5 | 6 | 7 |
- * | | | | |
- * | | | | |
- * +-----+----+------+-------+
- * S3| 8 | 9 | 10 | 11 |
- * +-----+----+------+-------+
- *
- * Each horizontal and vertical segment is considered to by either
- * stretchable (marked by the Sx labels) or fixed (marked by the Fy
- * labels), in the horizontal or vertical axis, respectively. In the
- * above example, the first is horizontal segment (F0) is fixed, the
- * next is stretchable and then they continue to alternate. Note that
- * the segment list for each axis can begin or end with a stretchable
- * or fixed segment.
- *
- * The relative sizes of the stretchy segments indicates the relative
- * amount of stretchiness of the regions bordered by the segments. For
- * example, regions 3, 7 and 11 above will take up more horizontal space
- * than regions 1, 5 and 9 since the horizontal segment associated with
- * the first set of regions is larger than the other set of regions. The
- * ratios of the amount of horizontal (or vertical) space taken by any
- * two stretchable slices is exactly the ratio of their corresponding
- * segment lengths.
- *
- * xDivs and yDivs point to arrays of horizontal and vertical pixel
- * indices. The first pair of Divs (in either array) indicate the
- * starting and ending points of the first stretchable segment in that
- * axis. The next pair specifies the next stretchable segment, etc. So
- * in the above example xDiv[0] and xDiv[1] specify the horizontal
- * coordinates for the regions labeled 1, 5 and 9. xDiv[2] and
- * xDiv[3] specify the coordinates for regions 3, 7 and 11. Note that
- * the leftmost slices always start at x=0 and the rightmost slices
- * always end at the end of the image. So, for example, the regions 0,
- * 4 and 8 (which are fixed along the X axis) start at x value 0 and
- * go to xDiv[0] and slices 2, 6 and 10 start at xDiv[1] and end at
- * xDiv[2].
- *
- * The array pointed to by the colors field lists contains hints for
- * each of the regions. They are ordered according left-to-right and
- * top-to-bottom as indicated above. For each segment that is a solid
- * color the array entry will contain that color value; otherwise it
- * will contain NO_COLOR. Segments that are completely transparent
- * will always have the value TRANSPARENT_COLOR.
- *
- * The PNG chunk type is "npTc".
- */
-struct Res_png_9patch
-{
- Res_png_9patch() : wasDeserialized(false), xDivs(NULL),
- yDivs(NULL), colors(NULL) { }
-
- int8_t wasDeserialized;
- int8_t numXDivs;
- int8_t numYDivs;
- int8_t numColors;
-
- // These tell where the next section of a patch starts.
- // For example, the first patch includes the pixels from
- // 0 to xDivs[0]-1 and the second patch includes the pixels
- // from xDivs[0] to xDivs[1]-1.
- // Note: allocation/free of these pointers is left to the caller.
- int32_t* xDivs;
- int32_t* yDivs;
-
- int32_t paddingLeft, paddingRight;
- int32_t paddingTop, paddingBottom;
-
- enum {
- // The 9 patch segment is not a solid color.
- NO_COLOR = 0x00000001,
-
- // The 9 patch segment is completely transparent.
- TRANSPARENT_COLOR = 0x00000000
- };
- // Note: allocation/free of this pointer is left to the caller.
- uint32_t* colors;
-
- // Convert data from device representation to PNG file representation.
- void deviceToFile();
- // Convert data from PNG file representation to device representation.
- void fileToDevice();
- // Serialize/Marshall the patch data into a newly malloc-ed block
- void* serialize();
- // Serialize/Marshall the patch data
- void serialize(void* outData);
- // Deserialize/Unmarshall the patch data
- static Res_png_9patch* deserialize(const void* data);
- // Compute the size of the serialized data structure
- size_t serializedSize();
-};
-
-/** ********************************************************************
- * Base Types
- *
- * These are standard types that are shared between multiple specific
- * resource types.
- *
- *********************************************************************** */
-
-/**
- * Header that appears at the front of every data chunk in a resource.
- */
-struct ResChunk_header
-{
- // Type identifier for this chunk. The meaning of this value depends
- // on the containing chunk.
- uint16_t type;
-
- // Size of the chunk header (in bytes). Adding this value to
- // the address of the chunk allows you to find its associated data
- // (if any).
- uint16_t headerSize;
-
- // Total size of this chunk (in bytes). This is the chunkSize plus
- // the size of any data associated with the chunk. Adding this value
- // to the chunk allows you to completely skip its contents (including
- // any child chunks). If this value is the same as chunkSize, there is
- // no data associated with the chunk.
- uint32_t size;
-};
-
-enum {
- RES_NULL_TYPE = 0x0000,
- RES_STRING_POOL_TYPE = 0x0001,
- RES_TABLE_TYPE = 0x0002,
- RES_XML_TYPE = 0x0003,
-
- // Chunk types in RES_XML_TYPE
- RES_XML_FIRST_CHUNK_TYPE = 0x0100,
- RES_XML_START_NAMESPACE_TYPE= 0x0100,
- RES_XML_END_NAMESPACE_TYPE = 0x0101,
- RES_XML_START_ELEMENT_TYPE = 0x0102,
- RES_XML_END_ELEMENT_TYPE = 0x0103,
- RES_XML_CDATA_TYPE = 0x0104,
- RES_XML_LAST_CHUNK_TYPE = 0x017f,
- // This contains a uint32_t array mapping strings in the string
- // pool back to resource identifiers. It is optional.
- RES_XML_RESOURCE_MAP_TYPE = 0x0180,
-
- // Chunk types in RES_TABLE_TYPE
- RES_TABLE_PACKAGE_TYPE = 0x0200,
- RES_TABLE_TYPE_TYPE = 0x0201,
- RES_TABLE_TYPE_SPEC_TYPE = 0x0202
-};
-
-/**
- * Macros for building/splitting resource identifiers.
- */
-#define Res_VALIDID(resid) (resid != 0)
-#define Res_CHECKID(resid) ((resid&0xFFFF0000) != 0)
-#define Res_MAKEID(package, type, entry) \
- (((package+1)<<24) | (((type+1)&0xFF)<<16) | (entry&0xFFFF))
-#define Res_GETPACKAGE(id) ((id>>24)-1)
-#define Res_GETTYPE(id) (((id>>16)&0xFF)-1)
-#define Res_GETENTRY(id) (id&0xFFFF)
-
-#define Res_INTERNALID(resid) ((resid&0xFFFF0000) != 0 && (resid&0xFF0000) == 0)
-#define Res_MAKEINTERNAL(entry) (0x01000000 | (entry&0xFFFF))
-#define Res_MAKEARRAY(entry) (0x02000000 | (entry&0xFFFF))
-
-#define Res_MAXPACKAGE 255
-
-/**
- * Representation of a value in a resource, supplying type
- * information.
- */
-struct Res_value
-{
- // Number of bytes in this structure.
- uint16_t size;
-
- // Always set to 0.
- uint8_t res0;
-
- // Type of the data value.
- enum {
- // Contains no data.
- TYPE_NULL = 0x00,
- // The 'data' holds a ResTable_ref, a reference to another resource
- // table entry.
- TYPE_REFERENCE = 0x01,
- // The 'data' holds an attribute resource identifier.
- TYPE_ATTRIBUTE = 0x02,
- // The 'data' holds an index into the containing resource table's
- // global value string pool.
- TYPE_STRING = 0x03,
- // The 'data' holds a single-precision floating point number.
- TYPE_FLOAT = 0x04,
- // The 'data' holds a complex number encoding a dimension value,
- // such as "100in".
- TYPE_DIMENSION = 0x05,
- // The 'data' holds a complex number encoding a fraction of a
- // container.
- TYPE_FRACTION = 0x06,
-
- // Beginning of integer flavors...
- TYPE_FIRST_INT = 0x10,
-
- // The 'data' is a raw integer value of the form n..n.
- TYPE_INT_DEC = 0x10,
- // The 'data' is a raw integer value of the form 0xn..n.
- TYPE_INT_HEX = 0x11,
- // The 'data' is either 0 or 1, for input "false" or "true" respectively.
- TYPE_INT_BOOLEAN = 0x12,
-
- // Beginning of color integer flavors...
- TYPE_FIRST_COLOR_INT = 0x1c,
-
- // The 'data' is a raw integer value of the form #aarrggbb.
- TYPE_INT_COLOR_ARGB8 = 0x1c,
- // The 'data' is a raw integer value of the form #rrggbb.
- TYPE_INT_COLOR_RGB8 = 0x1d,
- // The 'data' is a raw integer value of the form #argb.
- TYPE_INT_COLOR_ARGB4 = 0x1e,
- // The 'data' is a raw integer value of the form #rgb.
- TYPE_INT_COLOR_RGB4 = 0x1f,
-
- // ...end of integer flavors.
- TYPE_LAST_COLOR_INT = 0x1f,
-
- // ...end of integer flavors.
- TYPE_LAST_INT = 0x1f
- };
- uint8_t dataType;
-
- // Structure of complex data values (TYPE_UNIT and TYPE_FRACTION)
- enum {
- // Where the unit type information is. This gives us 16 possible
- // types, as defined below.
- COMPLEX_UNIT_SHIFT = 0,
- COMPLEX_UNIT_MASK = 0xf,
-
- // TYPE_DIMENSION: Value is raw pixels.
- COMPLEX_UNIT_PX = 0,
- // TYPE_DIMENSION: Value is Device Independent Pixels.
- COMPLEX_UNIT_DIP = 1,
- // TYPE_DIMENSION: Value is a Scaled device independent Pixels.
- COMPLEX_UNIT_SP = 2,
- // TYPE_DIMENSION: Value is in points.
- COMPLEX_UNIT_PT = 3,
- // TYPE_DIMENSION: Value is in inches.
- COMPLEX_UNIT_IN = 4,
- // TYPE_DIMENSION: Value is in millimeters.
- COMPLEX_UNIT_MM = 5,
-
- // TYPE_FRACTION: A basic fraction of the overall size.
- COMPLEX_UNIT_FRACTION = 0,
- // TYPE_FRACTION: A fraction of the parent size.
- COMPLEX_UNIT_FRACTION_PARENT = 1,
-
- // Where the radix information is, telling where the decimal place
- // appears in the mantissa. This give us 4 possible fixed point
- // representations as defined below.
- COMPLEX_RADIX_SHIFT = 4,
- COMPLEX_RADIX_MASK = 0x3,
-
- // The mantissa is an integral number -- i.e., 0xnnnnnn.0
- COMPLEX_RADIX_23p0 = 0,
- // The mantissa magnitude is 16 bits -- i.e, 0xnnnn.nn
- COMPLEX_RADIX_16p7 = 1,
- // The mantissa magnitude is 8 bits -- i.e, 0xnn.nnnn
- COMPLEX_RADIX_8p15 = 2,
- // The mantissa magnitude is 0 bits -- i.e, 0x0.nnnnnn
- COMPLEX_RADIX_0p23 = 3,
-
- // Where the actual value is. This gives us 23 bits of
- // precision. The top bit is the sign.
- COMPLEX_MANTISSA_SHIFT = 8,
- COMPLEX_MANTISSA_MASK = 0xffffff
- };
-
- // The data for this item, as interpreted according to dataType.
- uint32_t data;
-
- void copyFrom_dtoh(const Res_value& src);
-};
-
-/**
- * This is a reference to a unique entry (a ResTable_entry structure)
- * in a resource table. The value is structured as: 0xpptteeee,
- * where pp is the package index, tt is the type index in that
- * package, and eeee is the entry index in that type. The package
- * and type values start at 1 for the first item, to help catch cases
- * where they have not been supplied.
- */
-struct ResTable_ref
-{
- uint32_t ident;
-};
-
-/**
- * Reference to a string in a string pool.
- */
-struct ResStringPool_ref
-{
- // Index into the string pool table (uint32_t-offset from the indices
- // immediately after ResStringPool_header) at which to find the location
- // of the string data in the pool.
- uint32_t index;
-};
-
-/** ********************************************************************
- * String Pool
- *
- * A set of strings that can be references by others through a
- * ResStringPool_ref.
- *
- *********************************************************************** */
-
-/**
- * Definition for a pool of strings. The data of this chunk is an
- * array of uint32_t providing indices into the pool, relative to
- * stringsStart. At stringsStart are all of the UTF-16 strings
- * concatenated together; each starts with a uint16_t of the string's
- * length and each ends with a 0x0000 terminator. If a string is >
- * 32767 characters, the high bit of the length is set meaning to take
- * those 15 bits as a high word and it will be followed by another
- * uint16_t containing the low word.
- *
- * If styleCount is not zero, then immediately following the array of
- * uint32_t indices into the string table is another array of indices
- * into a style table starting at stylesStart. Each entry in the
- * style table is an array of ResStringPool_span structures.
- */
-struct ResStringPool_header
-{
- struct ResChunk_header header;
-
- // Number of strings in this pool (number of uint32_t indices that follow
- // in the data).
- uint32_t stringCount;
-
- // Number of style span arrays in the pool (number of uint32_t indices
- // follow the string indices).
- uint32_t styleCount;
-
- // Flags.
- enum {
- // If set, the string index is sorted by the string values (based
- // on strcmp16()).
- SORTED_FLAG = 1<<0,
-
- // String pool is encoded in UTF-8
- UTF8_FLAG = 1<<8
- };
- uint32_t flags;
-
- // Index from header of the string data.
- uint32_t stringsStart;
-
- // Index from header of the style data.
- uint32_t stylesStart;
-};
-
-/**
- * This structure defines a span of style information associated with
- * a string in the pool.
- */
-struct ResStringPool_span
-{
- enum {
- END = 0xFFFFFFFF
- };
-
- // This is the name of the span -- that is, the name of the XML
- // tag that defined it. The special value END (0xFFFFFFFF) indicates
- // the end of an array of spans.
- ResStringPool_ref name;
-
- // The range of characters in the string that this span applies to.
- uint32_t firstChar, lastChar;
-};
-
-/**
- * Convenience class for accessing data in a ResStringPool resource.
- */
-class ResStringPool
-{
-public:
- ResStringPool();
- ResStringPool(const void* data, size_t size, bool copyData=false);
- ~ResStringPool();
-
- status_t setTo(const void* data, size_t size, bool copyData=false);
-
- status_t getError() const;
-
- void uninit();
-
- // Return string entry as UTF16; if the pool is UTF8, the string will
- // be converted before returning.
- inline const char16_t* stringAt(const ResStringPool_ref& ref, size_t* outLen) const {
- return stringAt(ref.index, outLen);
- }
- const char16_t* stringAt(size_t idx, size_t* outLen) const;
-
- // Note: returns null if the string pool is not UTF8.
- const char* string8At(size_t idx, size_t* outLen) const;
-
- // Return string whether the pool is UTF8 or UTF16. Does not allow you
- // to distinguish null.
- const String8 string8ObjectAt(size_t idx) const;
-
- const ResStringPool_span* styleAt(const ResStringPool_ref& ref) const;
- const ResStringPool_span* styleAt(size_t idx) const;
-
- ssize_t indexOfString(const char16_t* str, size_t strLen) const;
-
- size_t size() const;
- size_t styleCount() const;
- size_t bytes() const;
-
- bool isSorted() const;
- bool isUTF8() const;
-
-private:
- status_t mError;
- void* mOwnedData;
- const ResStringPool_header* mHeader;
- size_t mSize;
- mutable Mutex mDecodeLock;
- const uint32_t* mEntries;
- const uint32_t* mEntryStyles;
- const void* mStrings;
- char16_t** mCache;
- uint32_t mStringPoolSize; // number of uint16_t
- const uint32_t* mStyles;
- uint32_t mStylePoolSize; // number of uint32_t
-};
-
-/** ********************************************************************
- * XML Tree
- *
- * Binary representation of an XML document. This is designed to
- * express everything in an XML document, in a form that is much
- * easier to parse on the device.
- *
- *********************************************************************** */
-
-/**
- * XML tree header. This appears at the front of an XML tree,
- * describing its content. It is followed by a flat array of
- * ResXMLTree_node structures; the hierarchy of the XML document
- * is described by the occurrance of RES_XML_START_ELEMENT_TYPE
- * and corresponding RES_XML_END_ELEMENT_TYPE nodes in the array.
- */
-struct ResXMLTree_header
-{
- struct ResChunk_header header;
-};
-
-/**
- * Basic XML tree node. A single item in the XML document. Extended info
- * about the node can be found after header.headerSize.
- */
-struct ResXMLTree_node
-{
- struct ResChunk_header header;
-
- // Line number in original source file at which this element appeared.
- uint32_t lineNumber;
-
- // Optional XML comment that was associated with this element; -1 if none.
- struct ResStringPool_ref comment;
-};
-
-/**
- * Extended XML tree node for CDATA tags -- includes the CDATA string.
- * Appears header.headerSize bytes after a ResXMLTree_node.
- */
-struct ResXMLTree_cdataExt
-{
- // The raw CDATA character data.
- struct ResStringPool_ref data;
-
- // The typed value of the character data if this is a CDATA node.
- struct Res_value typedData;
-};
-
-/**
- * Extended XML tree node for namespace start/end nodes.
- * Appears header.headerSize bytes after a ResXMLTree_node.
- */
-struct ResXMLTree_namespaceExt
-{
- // The prefix of the namespace.
- struct ResStringPool_ref prefix;
-
- // The URI of the namespace.
- struct ResStringPool_ref uri;
-};
-
-/**
- * Extended XML tree node for element start/end nodes.
- * Appears header.headerSize bytes after a ResXMLTree_node.
- */
-struct ResXMLTree_endElementExt
-{
- // String of the full namespace of this element.
- struct ResStringPool_ref ns;
-
- // String name of this node if it is an ELEMENT; the raw
- // character data if this is a CDATA node.
- struct ResStringPool_ref name;
-};
-
-/**
- * Extended XML tree node for start tags -- includes attribute
- * information.
- * Appears header.headerSize bytes after a ResXMLTree_node.
- */
-struct ResXMLTree_attrExt
-{
- // String of the full namespace of this element.
- struct ResStringPool_ref ns;
-
- // String name of this node if it is an ELEMENT; the raw
- // character data if this is a CDATA node.
- struct ResStringPool_ref name;
-
- // Byte offset from the start of this structure where the attributes start.
- uint16_t attributeStart;
-
- // Size of the ResXMLTree_attribute structures that follow.
- uint16_t attributeSize;
-
- // Number of attributes associated with an ELEMENT. These are
- // available as an array of ResXMLTree_attribute structures
- // immediately following this node.
- uint16_t attributeCount;
-
- // Index (1-based) of the "id" attribute. 0 if none.
- uint16_t idIndex;
-
- // Index (1-based) of the "class" attribute. 0 if none.
- uint16_t classIndex;
-
- // Index (1-based) of the "style" attribute. 0 if none.
- uint16_t styleIndex;
-};
-
-struct ResXMLTree_attribute
-{
- // Namespace of this attribute.
- struct ResStringPool_ref ns;
-
- // Name of this attribute.
- struct ResStringPool_ref name;
-
- // The original raw string value of this attribute.
- struct ResStringPool_ref rawValue;
-
- // Processesd typed value of this attribute.
- struct Res_value typedValue;
-};
-
-class ResXMLTree;
-
-class ResXMLParser
-{
-public:
- ResXMLParser(const ResXMLTree& tree);
-
- enum event_code_t {
- BAD_DOCUMENT = -1,
- START_DOCUMENT = 0,
- END_DOCUMENT = 1,
-
- FIRST_CHUNK_CODE = RES_XML_FIRST_CHUNK_TYPE,
-
- START_NAMESPACE = RES_XML_START_NAMESPACE_TYPE,
- END_NAMESPACE = RES_XML_END_NAMESPACE_TYPE,
- START_TAG = RES_XML_START_ELEMENT_TYPE,
- END_TAG = RES_XML_END_ELEMENT_TYPE,
- TEXT = RES_XML_CDATA_TYPE
- };
-
- struct ResXMLPosition
- {
- event_code_t eventCode;
- const ResXMLTree_node* curNode;
- const void* curExt;
- };
-
- void restart();
-
- const ResStringPool& getStrings() const;
-
- event_code_t getEventType() const;
- // Note, unlike XmlPullParser, the first call to next() will return
- // START_TAG of the first element.
- event_code_t next();
-
- // These are available for all nodes:
- int32_t getCommentID() const;
- const uint16_t* getComment(size_t* outLen) const;
- uint32_t getLineNumber() const;
-
- // This is available for TEXT:
- int32_t getTextID() const;
- const uint16_t* getText(size_t* outLen) const;
- ssize_t getTextValue(Res_value* outValue) const;
-
- // These are available for START_NAMESPACE and END_NAMESPACE:
- int32_t getNamespacePrefixID() const;
- const uint16_t* getNamespacePrefix(size_t* outLen) const;
- int32_t getNamespaceUriID() const;
- const uint16_t* getNamespaceUri(size_t* outLen) const;
-
- // These are available for START_TAG and END_TAG:
- int32_t getElementNamespaceID() const;
- const uint16_t* getElementNamespace(size_t* outLen) const;
- int32_t getElementNameID() const;
- const uint16_t* getElementName(size_t* outLen) const;
-
- // Remaining methods are for retrieving information about attributes
- // associated with a START_TAG:
-
- size_t getAttributeCount() const;
-
- // Returns -1 if no namespace, -2 if idx out of range.
- int32_t getAttributeNamespaceID(size_t idx) const;
- const uint16_t* getAttributeNamespace(size_t idx, size_t* outLen) const;
-
- int32_t getAttributeNameID(size_t idx) const;
- const uint16_t* getAttributeName(size_t idx, size_t* outLen) const;
- uint32_t getAttributeNameResID(size_t idx) const;
-
- int32_t getAttributeValueStringID(size_t idx) const;
- const uint16_t* getAttributeStringValue(size_t idx, size_t* outLen) const;
-
- int32_t getAttributeDataType(size_t idx) const;
- int32_t getAttributeData(size_t idx) const;
- ssize_t getAttributeValue(size_t idx, Res_value* outValue) const;
-
- ssize_t indexOfAttribute(const char* ns, const char* attr) const;
- ssize_t indexOfAttribute(const char16_t* ns, size_t nsLen,
- const char16_t* attr, size_t attrLen) const;
-
- ssize_t indexOfID() const;
- ssize_t indexOfClass() const;
- ssize_t indexOfStyle() const;
-
- void getPosition(ResXMLPosition* pos) const;
- void setPosition(const ResXMLPosition& pos);
-
-private:
- friend class ResXMLTree;
-
- event_code_t nextNode();
-
- const ResXMLTree& mTree;
- event_code_t mEventCode;
- const ResXMLTree_node* mCurNode;
- const void* mCurExt;
-};
-
-/**
- * Convenience class for accessing data in a ResXMLTree resource.
- */
-class ResXMLTree : public ResXMLParser
-{
-public:
- ResXMLTree();
- ResXMLTree(const void* data, size_t size, bool copyData=false);
- ~ResXMLTree();
-
- status_t setTo(const void* data, size_t size, bool copyData=false);
-
- status_t getError() const;
-
- void uninit();
-
-private:
- friend class ResXMLParser;
-
- status_t validateNode(const ResXMLTree_node* node) const;
-
- status_t mError;
- void* mOwnedData;
- const ResXMLTree_header* mHeader;
- size_t mSize;
- const uint8_t* mDataEnd;
- ResStringPool mStrings;
- const uint32_t* mResIds;
- size_t mNumResIds;
- const ResXMLTree_node* mRootNode;
- const void* mRootExt;
- event_code_t mRootCode;
-};
-
-/** ********************************************************************
- * RESOURCE TABLE
- *
- *********************************************************************** */
-
-/**
- * Header for a resource table. Its data contains a series of
- * additional chunks:
- * * A ResStringPool_header containing all table values. This string pool
- * contains all of the string values in the entire resource table (not
- * the names of entries or type identifiers however).
- * * One or more ResTable_package chunks.
- *
- * Specific entries within a resource table can be uniquely identified
- * with a single integer as defined by the ResTable_ref structure.
- */
-struct ResTable_header
-{
- struct ResChunk_header header;
-
- // The number of ResTable_package structures.
- uint32_t packageCount;
-};
-
-/**
- * A collection of resource data types within a package. Followed by
- * one or more ResTable_type and ResTable_typeSpec structures containing the
- * entry values for each resource type.
- */
-struct ResTable_package
-{
- struct ResChunk_header header;
-
- // If this is a base package, its ID. Package IDs start
- // at 1 (corresponding to the value of the package bits in a
- // resource identifier). 0 means this is not a base package.
- uint32_t id;
-
- // Actual name of this package, \0-terminated.
- char16_t name[128];
-
- // Offset to a ResStringPool_header defining the resource
- // type symbol table. If zero, this package is inheriting from
- // another base package (overriding specific values in it).
- uint32_t typeStrings;
-
- // Last index into typeStrings that is for public use by others.
- uint32_t lastPublicType;
-
- // Offset to a ResStringPool_header defining the resource
- // key symbol table. If zero, this package is inheriting from
- // another base package (overriding specific values in it).
- uint32_t keyStrings;
-
- // Last index into keyStrings that is for public use by others.
- uint32_t lastPublicKey;
-};
-
-/**
- * Describes a particular resource configuration.
- */
-struct ResTable_config
-{
- // Number of bytes in this structure.
- uint32_t size;
-
- union {
- struct {
- // Mobile country code (from SIM). 0 means "any".
- uint16_t mcc;
- // Mobile network code (from SIM). 0 means "any".
- uint16_t mnc;
- };
- uint32_t imsi;
- };
-
- union {
- struct {
- // \0\0 means "any". Otherwise, en, fr, etc.
- char language[2];
-
- // \0\0 means "any". Otherwise, US, CA, etc.
- char country[2];
- };
- uint32_t locale;
- };
-
- enum {
- ORIENTATION_ANY = ACONFIGURATION_ORIENTATION_ANY,
- ORIENTATION_PORT = ACONFIGURATION_ORIENTATION_PORT,
- ORIENTATION_LAND = ACONFIGURATION_ORIENTATION_LAND,
- ORIENTATION_SQUARE = ACONFIGURATION_ORIENTATION_SQUARE,
- };
-
- enum {
- TOUCHSCREEN_ANY = ACONFIGURATION_TOUCHSCREEN_ANY,
- TOUCHSCREEN_NOTOUCH = ACONFIGURATION_TOUCHSCREEN_NOTOUCH,
- TOUCHSCREEN_STYLUS = ACONFIGURATION_TOUCHSCREEN_STYLUS,
- TOUCHSCREEN_FINGER = ACONFIGURATION_TOUCHSCREEN_FINGER,
- };
-
- enum {
- DENSITY_DEFAULT = ACONFIGURATION_DENSITY_DEFAULT,
- DENSITY_LOW = ACONFIGURATION_DENSITY_LOW,
- DENSITY_MEDIUM = ACONFIGURATION_DENSITY_MEDIUM,
- DENSITY_TV = ACONFIGURATION_DENSITY_TV,
- DENSITY_HIGH = ACONFIGURATION_DENSITY_HIGH,
- DENSITY_XHIGH = ACONFIGURATION_DENSITY_XHIGH,
- DENSITY_XXHIGH = ACONFIGURATION_DENSITY_XXHIGH,
- DENSITY_NONE = ACONFIGURATION_DENSITY_NONE
- };
-
- union {
- struct {
- uint8_t orientation;
- uint8_t touchscreen;
- uint16_t density;
- };
- uint32_t screenType;
- };
-
- enum {
- KEYBOARD_ANY = ACONFIGURATION_KEYBOARD_ANY,
- KEYBOARD_NOKEYS = ACONFIGURATION_KEYBOARD_NOKEYS,
- KEYBOARD_QWERTY = ACONFIGURATION_KEYBOARD_QWERTY,
- KEYBOARD_12KEY = ACONFIGURATION_KEYBOARD_12KEY,
- };
-
- enum {
- NAVIGATION_ANY = ACONFIGURATION_NAVIGATION_ANY,
- NAVIGATION_NONAV = ACONFIGURATION_NAVIGATION_NONAV,
- NAVIGATION_DPAD = ACONFIGURATION_NAVIGATION_DPAD,
- NAVIGATION_TRACKBALL = ACONFIGURATION_NAVIGATION_TRACKBALL,
- NAVIGATION_WHEEL = ACONFIGURATION_NAVIGATION_WHEEL,
- };
-
- enum {
- MASK_KEYSHIDDEN = 0x0003,
- KEYSHIDDEN_ANY = ACONFIGURATION_KEYSHIDDEN_ANY,
- KEYSHIDDEN_NO = ACONFIGURATION_KEYSHIDDEN_NO,
- KEYSHIDDEN_YES = ACONFIGURATION_KEYSHIDDEN_YES,
- KEYSHIDDEN_SOFT = ACONFIGURATION_KEYSHIDDEN_SOFT,
- };
-
- enum {
- MASK_NAVHIDDEN = 0x000c,
- SHIFT_NAVHIDDEN = 2,
- NAVHIDDEN_ANY = ACONFIGURATION_NAVHIDDEN_ANY << SHIFT_NAVHIDDEN,
- NAVHIDDEN_NO = ACONFIGURATION_NAVHIDDEN_NO << SHIFT_NAVHIDDEN,
- NAVHIDDEN_YES = ACONFIGURATION_NAVHIDDEN_YES << SHIFT_NAVHIDDEN,
- };
-
- union {
- struct {
- uint8_t keyboard;
- uint8_t navigation;
- uint8_t inputFlags;
- uint8_t inputPad0;
- };
- uint32_t input;
- };
-
- enum {
- SCREENWIDTH_ANY = 0
- };
-
- enum {
- SCREENHEIGHT_ANY = 0
- };
-
- union {
- struct {
- uint16_t screenWidth;
- uint16_t screenHeight;
- };
- uint32_t screenSize;
- };
-
- enum {
- SDKVERSION_ANY = 0
- };
-
- enum {
- MINORVERSION_ANY = 0
- };
-
- union {
- struct {
- uint16_t sdkVersion;
- // For now minorVersion must always be 0!!! Its meaning
- // is currently undefined.
- uint16_t minorVersion;
- };
- uint32_t version;
- };
-
- enum {
- // screenLayout bits for screen size class.
- MASK_SCREENSIZE = 0x0f,
- SCREENSIZE_ANY = ACONFIGURATION_SCREENSIZE_ANY,
- SCREENSIZE_SMALL = ACONFIGURATION_SCREENSIZE_SMALL,
- SCREENSIZE_NORMAL = ACONFIGURATION_SCREENSIZE_NORMAL,
- SCREENSIZE_LARGE = ACONFIGURATION_SCREENSIZE_LARGE,
- SCREENSIZE_XLARGE = ACONFIGURATION_SCREENSIZE_XLARGE,
-
- // screenLayout bits for wide/long screen variation.
- MASK_SCREENLONG = 0x30,
- SHIFT_SCREENLONG = 4,
- SCREENLONG_ANY = ACONFIGURATION_SCREENLONG_ANY << SHIFT_SCREENLONG,
- SCREENLONG_NO = ACONFIGURATION_SCREENLONG_NO << SHIFT_SCREENLONG,
- SCREENLONG_YES = ACONFIGURATION_SCREENLONG_YES << SHIFT_SCREENLONG,
- };
-
- enum {
- // uiMode bits for the mode type.
- MASK_UI_MODE_TYPE = 0x0f,
- UI_MODE_TYPE_ANY = ACONFIGURATION_UI_MODE_TYPE_ANY,
- UI_MODE_TYPE_NORMAL = ACONFIGURATION_UI_MODE_TYPE_NORMAL,
- UI_MODE_TYPE_DESK = ACONFIGURATION_UI_MODE_TYPE_DESK,
- UI_MODE_TYPE_CAR = ACONFIGURATION_UI_MODE_TYPE_CAR,
- UI_MODE_TYPE_TELEVISION = ACONFIGURATION_UI_MODE_TYPE_TELEVISION,
- UI_MODE_TYPE_APPLIANCE = ACONFIGURATION_UI_MODE_TYPE_APPLIANCE,
-
- // uiMode bits for the night switch.
- MASK_UI_MODE_NIGHT = 0x30,
- SHIFT_UI_MODE_NIGHT = 4,
- UI_MODE_NIGHT_ANY = ACONFIGURATION_UI_MODE_NIGHT_ANY << SHIFT_UI_MODE_NIGHT,
- UI_MODE_NIGHT_NO = ACONFIGURATION_UI_MODE_NIGHT_NO << SHIFT_UI_MODE_NIGHT,
- UI_MODE_NIGHT_YES = ACONFIGURATION_UI_MODE_NIGHT_YES << SHIFT_UI_MODE_NIGHT,
- };
-
- union {
- struct {
- uint8_t screenLayout;
- uint8_t uiMode;
- uint16_t smallestScreenWidthDp;
- };
- uint32_t screenConfig;
- };
-
- union {
- struct {
- uint16_t screenWidthDp;
- uint16_t screenHeightDp;
- };
- uint32_t screenSizeDp;
- };
-
- void copyFromDeviceNoSwap(const ResTable_config& o);
-
- void copyFromDtoH(const ResTable_config& o);
-
- void swapHtoD();
-
- int compare(const ResTable_config& o) const;
- int compareLogical(const ResTable_config& o) const;
-
- // Flags indicating a set of config values. These flag constants must
- // match the corresponding ones in android.content.pm.ActivityInfo and
- // attrs_manifest.xml.
- enum {
- CONFIG_MCC = ACONFIGURATION_MCC,
- CONFIG_MNC = ACONFIGURATION_MCC,
- CONFIG_LOCALE = ACONFIGURATION_LOCALE,
- CONFIG_TOUCHSCREEN = ACONFIGURATION_TOUCHSCREEN,
- CONFIG_KEYBOARD = ACONFIGURATION_KEYBOARD,
- CONFIG_KEYBOARD_HIDDEN = ACONFIGURATION_KEYBOARD_HIDDEN,
- CONFIG_NAVIGATION = ACONFIGURATION_NAVIGATION,
- CONFIG_ORIENTATION = ACONFIGURATION_ORIENTATION,
- CONFIG_DENSITY = ACONFIGURATION_DENSITY,
- CONFIG_SCREEN_SIZE = ACONFIGURATION_SCREEN_SIZE,
- CONFIG_SMALLEST_SCREEN_SIZE = ACONFIGURATION_SMALLEST_SCREEN_SIZE,
- CONFIG_VERSION = ACONFIGURATION_VERSION,
- CONFIG_SCREEN_LAYOUT = ACONFIGURATION_SCREEN_LAYOUT,
- CONFIG_UI_MODE = ACONFIGURATION_UI_MODE
- };
-
- // Compare two configuration, returning CONFIG_* flags set for each value
- // that is different.
- int diff(const ResTable_config& o) const;
-
- // Return true if 'this' is more specific than 'o'.
- bool isMoreSpecificThan(const ResTable_config& o) const;
-
- // Return true if 'this' is a better match than 'o' for the 'requested'
- // configuration. This assumes that match() has already been used to
- // remove any configurations that don't match the requested configuration
- // at all; if they are not first filtered, non-matching results can be
- // considered better than matching ones.
- // The general rule per attribute: if the request cares about an attribute
- // (it normally does), if the two (this and o) are equal it's a tie. If
- // they are not equal then one must be generic because only generic and
- // '==requested' will pass the match() call. So if this is not generic,
- // it wins. If this IS generic, o wins (return false).
- bool isBetterThan(const ResTable_config& o, const ResTable_config* requested) const;
-
- // Return true if 'this' can be considered a match for the parameters in
- // 'settings'.
- // Note this is asymetric. A default piece of data will match every request
- // but a request for the default should not match odd specifics
- // (ie, request with no mcc should not match a particular mcc's data)
- // settings is the requested settings
- bool match(const ResTable_config& settings) const;
-
- void getLocale(char str[6]) const;
-
- String8 toString() const;
-};
-
-/**
- * A specification of the resources defined by a particular type.
- *
- * There should be one of these chunks for each resource type.
- *
- * This structure is followed by an array of integers providing the set of
- * configuation change flags (ResTable_config::CONFIG_*) that have multiple
- * resources for that configuration. In addition, the high bit is set if that
- * resource has been made public.
- */
-struct ResTable_typeSpec
-{
- struct ResChunk_header header;
-
- // The type identifier this chunk is holding. Type IDs start
- // at 1 (corresponding to the value of the type bits in a
- // resource identifier). 0 is invalid.
- uint8_t id;
-
- // Must be 0.
- uint8_t res0;
- // Must be 0.
- uint16_t res1;
-
- // Number of uint32_t entry configuration masks that follow.
- uint32_t entryCount;
-
- enum {
- // Additional flag indicating an entry is public.
- SPEC_PUBLIC = 0x40000000
- };
-};
-
-/**
- * A collection of resource entries for a particular resource data
- * type. Followed by an array of uint32_t defining the resource
- * values, corresponding to the array of type strings in the
- * ResTable_package::typeStrings string block. Each of these hold an
- * index from entriesStart; a value of NO_ENTRY means that entry is
- * not defined.
- *
- * There may be multiple of these chunks for a particular resource type,
- * supply different configuration variations for the resource values of
- * that type.
- *
- * It would be nice to have an additional ordered index of entries, so
- * we can do a binary search if trying to find a resource by string name.
- */
-struct ResTable_type
-{
- struct ResChunk_header header;
-
- enum {
- NO_ENTRY = 0xFFFFFFFF
- };
-
- // The type identifier this chunk is holding. Type IDs start
- // at 1 (corresponding to the value of the type bits in a
- // resource identifier). 0 is invalid.
- uint8_t id;
-
- // Must be 0.
- uint8_t res0;
- // Must be 0.
- uint16_t res1;
-
- // Number of uint32_t entry indices that follow.
- uint32_t entryCount;
-
- // Offset from header where ResTable_entry data starts.
- uint32_t entriesStart;
-
- // Configuration this collection of entries is designed for.
- ResTable_config config;
-};
-
-/**
- * This is the beginning of information about an entry in the resource
- * table. It holds the reference to the name of this entry, and is
- * immediately followed by one of:
- * * A Res_value structure, if FLAG_COMPLEX is -not- set.
- * * An array of ResTable_map structures, if FLAG_COMPLEX is set.
- * These supply a set of name/value mappings of data.
- */
-struct ResTable_entry
-{
- // Number of bytes in this structure.
- uint16_t size;
-
- enum {
- // If set, this is a complex entry, holding a set of name/value
- // mappings. It is followed by an array of ResTable_map structures.
- FLAG_COMPLEX = 0x0001,
- // If set, this resource has been declared public, so libraries
- // are allowed to reference it.
- FLAG_PUBLIC = 0x0002
- };
- uint16_t flags;
-
- // Reference into ResTable_package::keyStrings identifying this entry.
- struct ResStringPool_ref key;
-};
-
-/**
- * Extended form of a ResTable_entry for map entries, defining a parent map
- * resource from which to inherit values.
- */
-struct ResTable_map_entry : public ResTable_entry
-{
- // Resource identifier of the parent mapping, or 0 if there is none.
- ResTable_ref parent;
- // Number of name/value pairs that follow for FLAG_COMPLEX.
- uint32_t count;
-};
-
-/**
- * A single name/value mapping that is part of a complex resource
- * entry.
- */
-struct ResTable_map
-{
- // The resource identifier defining this mapping's name. For attribute
- // resources, 'name' can be one of the following special resource types
- // to supply meta-data about the attribute; for all other resource types
- // it must be an attribute resource.
- ResTable_ref name;
-
- // Special values for 'name' when defining attribute resources.
- enum {
- // This entry holds the attribute's type code.
- ATTR_TYPE = Res_MAKEINTERNAL(0),
-
- // For integral attributes, this is the minimum value it can hold.
- ATTR_MIN = Res_MAKEINTERNAL(1),
-
- // For integral attributes, this is the maximum value it can hold.
- ATTR_MAX = Res_MAKEINTERNAL(2),
-
- // Localization of this resource is can be encouraged or required with
- // an aapt flag if this is set
- ATTR_L10N = Res_MAKEINTERNAL(3),
-
- // for plural support, see android.content.res.PluralRules#attrForQuantity(int)
- ATTR_OTHER = Res_MAKEINTERNAL(4),
- ATTR_ZERO = Res_MAKEINTERNAL(5),
- ATTR_ONE = Res_MAKEINTERNAL(6),
- ATTR_TWO = Res_MAKEINTERNAL(7),
- ATTR_FEW = Res_MAKEINTERNAL(8),
- ATTR_MANY = Res_MAKEINTERNAL(9)
-
- };
-
- // Bit mask of allowed types, for use with ATTR_TYPE.
- enum {
- // No type has been defined for this attribute, use generic
- // type handling. The low 16 bits are for types that can be
- // handled generically; the upper 16 require additional information
- // in the bag so can not be handled generically for TYPE_ANY.
- TYPE_ANY = 0x0000FFFF,
-
- // Attribute holds a references to another resource.
- TYPE_REFERENCE = 1<<0,
-
- // Attribute holds a generic string.
- TYPE_STRING = 1<<1,
-
- // Attribute holds an integer value. ATTR_MIN and ATTR_MIN can
- // optionally specify a constrained range of possible integer values.
- TYPE_INTEGER = 1<<2,
-
- // Attribute holds a boolean integer.
- TYPE_BOOLEAN = 1<<3,
-
- // Attribute holds a color value.
- TYPE_COLOR = 1<<4,
-
- // Attribute holds a floating point value.
- TYPE_FLOAT = 1<<5,
-
- // Attribute holds a dimension value, such as "20px".
- TYPE_DIMENSION = 1<<6,
-
- // Attribute holds a fraction value, such as "20%".
- TYPE_FRACTION = 1<<7,
-
- // Attribute holds an enumeration. The enumeration values are
- // supplied as additional entries in the map.
- TYPE_ENUM = 1<<16,
-
- // Attribute holds a bitmaks of flags. The flag bit values are
- // supplied as additional entries in the map.
- TYPE_FLAGS = 1<<17
- };
-
- // Enum of localization modes, for use with ATTR_L10N.
- enum {
- L10N_NOT_REQUIRED = 0,
- L10N_SUGGESTED = 1
- };
-
- // This mapping's value.
- Res_value value;
-};
-
-/**
- * Convenience class for accessing data in a ResTable resource.
- */
-class ResTable
-{
-public:
- ResTable();
- ResTable(const void* data, size_t size, void* cookie,
- bool copyData=false);
- ~ResTable();
-
- status_t add(const void* data, size_t size, void* cookie,
- bool copyData=false, const void* idmap = NULL);
- status_t add(Asset* asset, void* cookie,
- bool copyData=false, const void* idmap = NULL);
- status_t add(ResTable* src);
-
- status_t getError() const;
-
- void uninit();
-
- struct resource_name
- {
- const char16_t* package;
- size_t packageLen;
- const char16_t* type;
- size_t typeLen;
- const char16_t* name;
- size_t nameLen;
- };
-
- bool getResourceName(uint32_t resID, resource_name* outName) const;
-
- /**
- * Retrieve the value of a resource. If the resource is found, returns a
- * value >= 0 indicating the table it is in (for use with
- * getTableStringBlock() and getTableCookie()) and fills in 'outValue'. If
- * not found, returns a negative error code.
- *
- * Note that this function does not do reference traversal. If you want
- * to follow references to other resources to get the "real" value to
- * use, you need to call resolveReference() after this function.
- *
- * @param resID The desired resoruce identifier.
- * @param outValue Filled in with the resource data that was found.
- *
- * @return ssize_t Either a >= 0 table index or a negative error code.
- */
- ssize_t getResource(uint32_t resID, Res_value* outValue, bool mayBeBag = false,
- uint16_t density = 0,
- uint32_t* outSpecFlags = NULL,
- ResTable_config* outConfig = NULL) const;
-
- inline ssize_t getResource(const ResTable_ref& res, Res_value* outValue,
- uint32_t* outSpecFlags=NULL) const {
- return getResource(res.ident, outValue, false, 0, outSpecFlags, NULL);
- }
-
- ssize_t resolveReference(Res_value* inOutValue,
- ssize_t blockIndex,
- uint32_t* outLastRef = NULL,
- uint32_t* inoutTypeSpecFlags = NULL,
- ResTable_config* outConfig = NULL) const;
-
- enum {
- TMP_BUFFER_SIZE = 16
- };
- const char16_t* valueToString(const Res_value* value, size_t stringBlock,
- char16_t tmpBuffer[TMP_BUFFER_SIZE],
- size_t* outLen);
-
- struct bag_entry {
- ssize_t stringBlock;
- ResTable_map map;
- };
-
- /**
- * Retrieve the bag of a resource. If the resoruce is found, returns the
- * number of bags it contains and 'outBag' points to an array of their
- * values. If not found, a negative error code is returned.
- *
- * Note that this function -does- do reference traversal of the bag data.
- *
- * @param resID The desired resource identifier.
- * @param outBag Filled inm with a pointer to the bag mappings.
- *
- * @return ssize_t Either a >= 0 bag count of negative error code.
- */
- ssize_t lockBag(uint32_t resID, const bag_entry** outBag) const;
-
- void unlockBag(const bag_entry* bag) const;
-
- void lock() const;
-
- ssize_t getBagLocked(uint32_t resID, const bag_entry** outBag,
- uint32_t* outTypeSpecFlags=NULL) const;
-
- void unlock() const;
-
- class Theme {
- public:
- Theme(const ResTable& table);
- ~Theme();
-
- inline const ResTable& getResTable() const { return mTable; }
-
- status_t applyStyle(uint32_t resID, bool force=false);
- status_t setTo(const Theme& other);
-
- /**
- * Retrieve a value in the theme. If the theme defines this
- * value, returns a value >= 0 indicating the table it is in
- * (for use with getTableStringBlock() and getTableCookie) and
- * fills in 'outValue'. If not found, returns a negative error
- * code.
- *
- * Note that this function does not do reference traversal. If you want
- * to follow references to other resources to get the "real" value to
- * use, you need to call resolveReference() after this function.
- *
- * @param resID A resource identifier naming the desired theme
- * attribute.
- * @param outValue Filled in with the theme value that was
- * found.
- *
- * @return ssize_t Either a >= 0 table index or a negative error code.
- */
- ssize_t getAttribute(uint32_t resID, Res_value* outValue,
- uint32_t* outTypeSpecFlags = NULL) const;
-
- /**
- * This is like ResTable::resolveReference(), but also takes
- * care of resolving attribute references to the theme.
- */
- ssize_t resolveAttributeReference(Res_value* inOutValue,
- ssize_t blockIndex, uint32_t* outLastRef = NULL,
- uint32_t* inoutTypeSpecFlags = NULL,
- ResTable_config* inoutConfig = NULL) const;
-
- void dumpToLog() const;
-
- private:
- Theme(const Theme&);
- Theme& operator=(const Theme&);
-
- struct theme_entry {
- ssize_t stringBlock;
- uint32_t typeSpecFlags;
- Res_value value;
- };
- struct type_info {
- size_t numEntries;
- theme_entry* entries;
- };
- struct package_info {
- size_t numTypes;
- type_info types[];
- };
-
- void free_package(package_info* pi);
- package_info* copy_package(package_info* pi);
-
- const ResTable& mTable;
- package_info* mPackages[Res_MAXPACKAGE];
- };
-
- void setParameters(const ResTable_config* params);
- void getParameters(ResTable_config* params) const;
-
- // Retrieve an identifier (which can be passed to getResource)
- // for a given resource name. The 'name' can be fully qualified
- // (<package>:<type>.<basename>) or the package or type components
- // can be dropped if default values are supplied here.
- //
- // Returns 0 if no such resource was found, else a valid resource ID.
- uint32_t identifierForName(const char16_t* name, size_t nameLen,
- const char16_t* type = 0, size_t typeLen = 0,
- const char16_t* defPackage = 0,
- size_t defPackageLen = 0,
- uint32_t* outTypeSpecFlags = NULL) const;
-
- static bool expandResourceRef(const uint16_t* refStr, size_t refLen,
- String16* outPackage,
- String16* outType,
- String16* outName,
- const String16* defType = NULL,
- const String16* defPackage = NULL,
- const char** outErrorMsg = NULL,
- bool* outPublicOnly = NULL);
-
- static bool stringToInt(const char16_t* s, size_t len, Res_value* outValue);
- static bool stringToFloat(const char16_t* s, size_t len, Res_value* outValue);
-
- // Used with stringToValue.
- class Accessor
- {
- public:
- inline virtual ~Accessor() { }
-
- virtual uint32_t getCustomResource(const String16& package,
- const String16& type,
- const String16& name) const = 0;
- virtual uint32_t getCustomResourceWithCreation(const String16& package,
- const String16& type,
- const String16& name,
- const bool createIfNeeded = false) = 0;
- virtual uint32_t getRemappedPackage(uint32_t origPackage) const = 0;
- virtual bool getAttributeType(uint32_t attrID, uint32_t* outType) = 0;
- virtual bool getAttributeMin(uint32_t attrID, uint32_t* outMin) = 0;
- virtual bool getAttributeMax(uint32_t attrID, uint32_t* outMax) = 0;
- virtual bool getAttributeEnum(uint32_t attrID,
- const char16_t* name, size_t nameLen,
- Res_value* outValue) = 0;
- virtual bool getAttributeFlags(uint32_t attrID,
- const char16_t* name, size_t nameLen,
- Res_value* outValue) = 0;
- virtual uint32_t getAttributeL10N(uint32_t attrID) = 0;
- virtual bool getLocalizationSetting() = 0;
- virtual void reportError(void* accessorCookie, const char* fmt, ...) = 0;
- };
-
- // Convert a string to a resource value. Handles standard "@res",
- // "#color", "123", and "0x1bd" types; performs escaping of strings.
- // The resulting value is placed in 'outValue'; if it is a string type,
- // 'outString' receives the string. If 'attrID' is supplied, the value is
- // type checked against this attribute and it is used to perform enum
- // evaluation. If 'acccessor' is supplied, it will be used to attempt to
- // resolve resources that do not exist in this ResTable. If 'attrType' is
- // supplied, the value will be type checked for this format if 'attrID'
- // is not supplied or found.
- bool stringToValue(Res_value* outValue, String16* outString,
- const char16_t* s, size_t len,
- bool preserveSpaces, bool coerceType,
- uint32_t attrID = 0,
- const String16* defType = NULL,
- const String16* defPackage = NULL,
- Accessor* accessor = NULL,
- void* accessorCookie = NULL,
- uint32_t attrType = ResTable_map::TYPE_ANY,
- bool enforcePrivate = true) const;
-
- // Perform processing of escapes and quotes in a string.
- static bool collectString(String16* outString,
- const char16_t* s, size_t len,
- bool preserveSpaces,
- const char** outErrorMsg = NULL,
- bool append = false);
-
- size_t getBasePackageCount() const;
- const char16_t* getBasePackageName(size_t idx) const;
- uint32_t getBasePackageId(size_t idx) const;
-
- // Return the number of resource tables that the object contains.
- size_t getTableCount() const;
- // Return the values string pool for the resource table at the given
- // index. This string pool contains all of the strings for values
- // contained in the resource table -- that is the item values themselves,
- // but not the names their entries or types.
- const ResStringPool* getTableStringBlock(size_t index) const;
- // Return unique cookie identifier for the given resource table.
- void* getTableCookie(size_t index) const;
-
- // Return the configurations (ResTable_config) that we know about
- void getConfigurations(Vector<ResTable_config>* configs) const;
-
- void getLocales(Vector<String8>* locales) const;
-
- // Generate an idmap.
- //
- // Return value: on success: NO_ERROR; caller is responsible for free-ing
- // outData (using free(3)). On failure, any status_t value other than
- // NO_ERROR; the caller should not free outData.
- status_t createIdmap(const ResTable& overlay, uint32_t originalCrc, uint32_t overlayCrc,
- void** outData, size_t* outSize) const;
-
- enum {
- IDMAP_HEADER_SIZE_BYTES = 3 * sizeof(uint32_t),
- };
- // Retrieve idmap meta-data.
- //
- // This function only requires the idmap header (the first
- // IDMAP_HEADER_SIZE_BYTES) bytes of an idmap file.
- static bool getIdmapInfo(const void* idmap, size_t size,
- uint32_t* pOriginalCrc, uint32_t* pOverlayCrc);
-
-#ifndef HAVE_ANDROID_OS
- void print(bool inclValues) const;
- static String8 normalizeForOutput(const char* input);
-#endif
-
-private:
- struct Header;
- struct Type;
- struct Package;
- struct PackageGroup;
- struct bag_set;
-
- status_t add(const void* data, size_t size, void* cookie,
- Asset* asset, bool copyData, const Asset* idmap);
-
- ssize_t getResourcePackageIndex(uint32_t resID) const;
- ssize_t getEntry(
- const Package* package, int typeIndex, int entryIndex,
- const ResTable_config* config,
- const ResTable_type** outType, const ResTable_entry** outEntry,
- const Type** outTypeClass) const;
- status_t parsePackage(
- const ResTable_package* const pkg, const Header* const header, uint32_t idmap_id);
-
- void print_value(const Package* pkg, const Res_value& value) const;
-
- mutable Mutex mLock;
-
- status_t mError;
-
- ResTable_config mParams;
-
- // Array of all resource tables.
- Vector<Header*> mHeaders;
-
- // Array of packages in all resource tables.
- Vector<PackageGroup*> mPackageGroups;
-
- // Mapping from resource package IDs to indices into the internal
- // package array.
- uint8_t mPackageMap[256];
-};
-
-} // namespace android
-
-#endif // _LIBS_UTILS_RESOURCE_TYPES_H
diff --git a/include/utils/StreamingZipInflater.h b/include/utils/StreamingZipInflater.h
deleted file mode 100644
index 3ace5d5..0000000
--- a/include/utils/StreamingZipInflater.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#ifndef __LIBS_STREAMINGZIPINFLATER_H
-#define __LIBS_STREAMINGZIPINFLATER_H
-
-#include <unistd.h>
-#include <inttypes.h>
-#include <zlib.h>
-
-#include <utils/Compat.h>
-
-namespace android {
-
-class StreamingZipInflater {
-public:
- static const size_t INPUT_CHUNK_SIZE = 64 * 1024;
- static const size_t OUTPUT_CHUNK_SIZE = 64 * 1024;
-
- // Flavor that pages in the compressed data from a fd
- StreamingZipInflater(int fd, off64_t compDataStart, size_t uncompSize, size_t compSize);
-
- // Flavor that gets the compressed data from an in-memory buffer
- StreamingZipInflater(class FileMap* dataMap, size_t uncompSize);
-
- ~StreamingZipInflater();
-
- // read 'count' bytes of uncompressed data from the current position. outBuf may
- // be NULL, in which case the data is consumed and discarded.
- ssize_t read(void* outBuf, size_t count);
-
- // seeking backwards requires uncompressing fom the beginning, so is very
- // expensive. seeking forwards only requires uncompressing from the current
- // position to the destination.
- off64_t seekAbsolute(off64_t absoluteInputPosition);
-
-private:
- void initInflateState();
- int readNextChunk();
-
- // where to find the uncompressed data
- int mFd;
- off64_t mInFileStart; // where the compressed data lives in the file
- class FileMap* mDataMap;
-
- z_stream mInflateState;
- bool mStreamNeedsInit;
-
- // output invariants for this asset
- uint8_t* mOutBuf; // output buf for decompressed bytes
- size_t mOutBufSize; // allocated size of mOutBuf
- size_t mOutTotalSize; // total uncompressed size of the blob
-
- // current output state bookkeeping
- off64_t mOutCurPosition; // current position in total offset
- size_t mOutLastDecoded; // last decoded byte + 1 in mOutbuf
- size_t mOutDeliverable; // next undelivered byte of decoded output in mOutBuf
-
- // input invariants
- uint8_t* mInBuf;
- size_t mInBufSize; // allocated size of mInBuf;
- size_t mInTotalSize; // total size of compressed data for this blob
-
- // input state bookkeeping
- size_t mInNextChunkOffset; // offset from start of blob at which the next input chunk lies
- // the z_stream contains state about input block consumption
-};
-
-}
-
-#endif
diff --git a/include/utils/ZipFileCRO.h b/include/utils/ZipFileCRO.h
deleted file mode 100644
index 3e42a95..0000000
--- a/include/utils/ZipFileCRO.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-//
-// C API for ead-only access to Zip archives, with minimal heap allocation.
-//
-#ifndef __LIBS_ZIPFILECRO_H
-#define __LIBS_ZIPFILECRO_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <utils/Compat.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Trivial typedef to ensure that ZipFileCRO is not treated as a simple integer.
- */
-typedef void* ZipFileCRO;
-
-/*
- * Trivial typedef to ensure that ZipEntryCRO is not treated as a simple
- * integer. We use NULL to indicate an invalid value.
- */
-typedef void* ZipEntryCRO;
-
-extern ZipFileCRO ZipFileXRO_open(const char* path);
-
-extern void ZipFileCRO_destroy(ZipFileCRO zip);
-
-extern ZipEntryCRO ZipFileCRO_findEntryByName(ZipFileCRO zip,
- const char* fileName);
-
-extern bool ZipFileCRO_getEntryInfo(ZipFileCRO zip, ZipEntryCRO entry,
- int* pMethod, size_t* pUncompLen,
- size_t* pCompLen, off64_t* pOffset, long* pModWhen, long* pCrc32);
-
-extern bool ZipFileCRO_uncompressEntry(ZipFileCRO zip, ZipEntryCRO entry, int fd);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*__LIBS_ZIPFILECRO_H*/
diff --git a/include/utils/ZipFileRO.h b/include/utils/ZipFileRO.h
deleted file mode 100644
index 547e36a..0000000
--- a/include/utils/ZipFileRO.h
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (C) 2007 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.
- */
-
-/*
- * Read-only access to Zip archives, with minimal heap allocation.
- *
- * This is similar to the more-complete ZipFile class, but no attempt
- * has been made to make them interchangeable. This class operates under
- * a very different set of assumptions and constraints.
- *
- * One such assumption is that if you're getting file descriptors for
- * use with this class as a child of a fork() operation, you must be on
- * a pread() to guarantee correct operation. This is because pread() can
- * atomically read at a file offset without worrying about a lock around an
- * lseek() + read() pair.
- */
-#ifndef __LIBS_ZIPFILERO_H
-#define __LIBS_ZIPFILERO_H
-
-#include <utils/Compat.h>
-#include <utils/Errors.h>
-#include <utils/FileMap.h>
-#include <utils/threads.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <time.h>
-
-namespace android {
-
-/*
- * Trivial typedef to ensure that ZipEntryRO is not treated as a simple
- * integer. We use NULL to indicate an invalid value.
- */
-typedef void* ZipEntryRO;
-
-/*
- * Open a Zip archive for reading.
- *
- * We want "open" and "find entry by name" to be fast operations, and we
- * want to use as little memory as possible. We memory-map the file,
- * and load a hash table with pointers to the filenames (which aren't
- * null-terminated). The other fields are at a fixed offset from the
- * filename, so we don't need to extract those (but we do need to byte-read
- * and endian-swap them every time we want them).
- *
- * To speed comparisons when doing a lookup by name, we could make the mapping
- * "private" (copy-on-write) and null-terminate the filenames after verifying
- * the record structure. However, this requires a private mapping of
- * every page that the Central Directory touches. Easier to tuck a copy
- * of the string length into the hash table entry.
- *
- * NOTE: If this is used on file descriptors inherited from a fork() operation,
- * you must be on a platform that implements pread() to guarantee correctness
- * on the shared file descriptors.
- */
-class ZipFileRO {
-public:
- ZipFileRO()
- : mFd(-1), mFileName(NULL), mFileLength(-1),
- mDirectoryMap(NULL),
- mNumEntries(-1), mDirectoryOffset(-1),
- mHashTableSize(-1), mHashTable(NULL)
- {}
-
- ~ZipFileRO();
-
- /*
- * Open an archive.
- */
- status_t open(const char* zipFileName);
-
- /*
- * Find an entry, by name. Returns the entry identifier, or NULL if
- * not found.
- *
- * If two entries have the same name, one will be chosen at semi-random.
- */
- ZipEntryRO findEntryByName(const char* fileName) const;
-
- /*
- * Return the #of entries in the Zip archive.
- */
- int getNumEntries(void) const {
- return mNumEntries;
- }
-
- /*
- * Return the Nth entry. Zip file entries are not stored in sorted
- * order, and updated entries may appear at the end, so anyone walking
- * the archive needs to avoid making ordering assumptions. We take
- * that further by returning the Nth non-empty entry in the hash table
- * rather than the Nth entry in the archive.
- *
- * Valid values are [0..numEntries).
- *
- * [This is currently O(n). If it needs to be fast we can allocate an
- * additional data structure or provide an iterator interface.]
- */
- ZipEntryRO findEntryByIndex(int idx) const;
-
- /*
- * Copy the filename into the supplied buffer. Returns 0 on success,
- * -1 if "entry" is invalid, or the filename length if it didn't fit. The
- * length, and the returned string, include the null-termination.
- */
- int getEntryFileName(ZipEntryRO entry, char* buffer, int bufLen) const;
-
- /*
- * Get the vital stats for an entry. Pass in NULL pointers for anything
- * you don't need.
- *
- * "*pOffset" holds the Zip file offset of the entry's data.
- *
- * Returns "false" if "entry" is bogus or if the data in the Zip file
- * appears to be bad.
- */
- bool getEntryInfo(ZipEntryRO entry, int* pMethod, size_t* pUncompLen,
- size_t* pCompLen, off64_t* pOffset, long* pModWhen, long* pCrc32) const;
-
- /*
- * Create a new FileMap object that maps a subset of the archive. For
- * an uncompressed entry this effectively provides a pointer to the
- * actual data, for a compressed entry this provides the input buffer
- * for inflate().
- */
- FileMap* createEntryFileMap(ZipEntryRO entry) const;
-
- /*
- * Uncompress the data into a buffer. Depending on the compression
- * format, this is either an "inflate" operation or a memcpy.
- *
- * Use "uncompLen" from getEntryInfo() to determine the required
- * buffer size.
- *
- * Returns "true" on success.
- */
- bool uncompressEntry(ZipEntryRO entry, void* buffer) const;
-
- /*
- * Uncompress the data to an open file descriptor.
- */
- bool uncompressEntry(ZipEntryRO entry, int fd) const;
-
- /* Zip compression methods we support */
- enum {
- kCompressStored = 0, // no compression
- kCompressDeflated = 8, // standard deflate
- };
-
- /*
- * Utility function: uncompress deflated data, buffer to buffer.
- */
- static bool inflateBuffer(void* outBuf, const void* inBuf,
- size_t uncompLen, size_t compLen);
-
- /*
- * Utility function: uncompress deflated data, buffer to fd.
- */
- static bool inflateBuffer(int fd, const void* inBuf,
- size_t uncompLen, size_t compLen);
-
- /*
- * Utility function to convert ZIP's time format to a timespec struct.
- */
- static inline void zipTimeToTimespec(long when, struct tm* timespec) {
- const long date = when >> 16;
- timespec->tm_year = ((date >> 9) & 0x7F) + 80; // Zip is years since 1980
- timespec->tm_mon = (date >> 5) & 0x0F;
- timespec->tm_mday = date & 0x1F;
-
- timespec->tm_hour = (when >> 11) & 0x1F;
- timespec->tm_min = (when >> 5) & 0x3F;
- timespec->tm_sec = (when & 0x1F) << 1;
- }
-
- /*
- * Some basic functions for raw data manipulation. "LE" means
- * Little Endian.
- */
- static inline unsigned short get2LE(const unsigned char* buf) {
- return buf[0] | (buf[1] << 8);
- }
- static inline unsigned long get4LE(const unsigned char* buf) {
- return buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24);
- }
-
-private:
- /* these are private and not defined */
- ZipFileRO(const ZipFileRO& src);
- ZipFileRO& operator=(const ZipFileRO& src);
-
- /* locate and parse the central directory */
- bool mapCentralDirectory(void);
-
- /* parse the archive, prepping internal structures */
- bool parseZipArchive(void);
-
- /* add a new entry to the hash table */
- void addToHash(const char* str, int strLen, unsigned int hash);
-
- /* compute string hash code */
- static unsigned int computeHash(const char* str, int len);
-
- /* convert a ZipEntryRO back to a hash table index */
- int entryToIndex(const ZipEntryRO entry) const;
-
- /*
- * One entry in the hash table.
- */
- typedef struct HashEntry {
- const char* name;
- unsigned short nameLen;
- //unsigned int hash;
- } HashEntry;
-
- /* open Zip archive */
- int mFd;
-
- /* Lock for handling the file descriptor (seeks, etc) */
- mutable Mutex mFdLock;
-
- /* zip file name */
- char* mFileName;
-
- /* length of file */
- size_t mFileLength;
-
- /* mapped file */
- FileMap* mDirectoryMap;
-
- /* number of entries in the Zip archive */
- int mNumEntries;
-
- /* CD directory offset in the Zip archive */
- off64_t mDirectoryOffset;
-
- /*
- * We know how many entries are in the Zip archive, so we have a
- * fixed-size hash table. We probe for an empty slot.
- */
- int mHashTableSize;
- HashEntry* mHashTable;
-};
-
-}; // namespace android
-
-#endif /*__LIBS_ZIPFILERO_H*/
diff --git a/include/utils/ZipUtils.h b/include/utils/ZipUtils.h
deleted file mode 100644
index 42c42b6..0000000
--- a/include/utils/ZipUtils.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2007 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.
- */
-
-//
-// Miscellaneous zip/gzip utility functions.
-//
-#ifndef __LIBS_ZIPUTILS_H
-#define __LIBS_ZIPUTILS_H
-
-#include <stdio.h>
-
-namespace android {
-
-/*
- * Container class for utility functions, primarily for namespace reasons.
- */
-class ZipUtils {
-public:
- /*
- * General utility function for uncompressing "deflate" data from a file
- * to a buffer.
- */
- static bool inflateToBuffer(int fd, void* buf, long uncompressedLen,
- long compressedLen);
- static bool inflateToBuffer(FILE* fp, void* buf, long uncompressedLen,
- long compressedLen);
-
- /*
- * Someday we might want to make this generic and handle bzip2 ".bz2"
- * files too.
- *
- * We could declare gzip to be a sub-class of zip that has exactly
- * one always-compressed entry, but we currently want to treat Zip
- * and gzip as distinct, so there's no value.
- *
- * The zlib library has some gzip utilities, but it has no interface
- * for extracting the uncompressed length of the file (you do *not*
- * want to gzseek to the end).
- *
- * Pass in a seeked file pointer for the gzip file. If this is a gzip
- * file, we set our return values appropriately and return "true" with
- * the file seeked to the start of the compressed data.
- */
- static bool examineGzip(FILE* fp, int* pCompressionMethod,
- long* pUncompressedLen, long* pCompressedLen, unsigned long* pCRC32);
-
-private:
- ZipUtils() {}
- ~ZipUtils() {}
-};
-
-}; // namespace android
-
-#endif /*__LIBS_ZIPUTILS_H*/
diff --git a/libs/binder/IServiceManager.cpp b/libs/binder/IServiceManager.cpp
index 33b305d..1750640 100644
--- a/libs/binder/IServiceManager.cpp
+++ b/libs/binder/IServiceManager.cpp
@@ -151,12 +151,14 @@
return reply.readStrongBinder();
}
- virtual status_t addService(const String16& name, const sp<IBinder>& service)
+ virtual status_t addService(const String16& name, const sp<IBinder>& service,
+ bool allowIsolated)
{
Parcel data, reply;
data.writeInterfaceToken(IServiceManager::getInterfaceDescriptor());
data.writeString16(name);
data.writeStrongBinder(service);
+ data.writeInt32(allowIsolated ? 1 : 0);
status_t err = remote()->transact(ADD_SERVICE_TRANSACTION, data, &reply);
return err == NO_ERROR ? reply.readExceptionCode() : err;
}
diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp
index c7e2c0f..0791de2 100644
--- a/libs/gui/BufferQueue.cpp
+++ b/libs/gui/BufferQueue.cpp
@@ -166,6 +166,37 @@
return OK;
}
+int BufferQueue::query(int what, int* outValue)
+{
+ Mutex::Autolock lock(mMutex);
+
+ if (mAbandoned) {
+ ST_LOGE("query: SurfaceTexture has been abandoned!");
+ return NO_INIT;
+ }
+
+ int value;
+ switch (what) {
+ case NATIVE_WINDOW_WIDTH:
+ value = mDefaultWidth;
+ break;
+ case NATIVE_WINDOW_HEIGHT:
+ value = mDefaultHeight;
+ break;
+ case NATIVE_WINDOW_FORMAT:
+ value = mPixelFormat;
+ break;
+ case NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS:
+ value = mSynchronousMode ?
+ (MIN_UNDEQUEUED_BUFFERS-1) : MIN_UNDEQUEUED_BUFFERS;
+ break;
+ default:
+ return BAD_VALUE;
+ }
+ outValue[0] = value;
+ return NO_ERROR;
+}
+
status_t BufferQueue::requestBuffer(int slot, sp<GraphicBuffer>* buf) {
ST_LOGV("requestBuffer: slot=%d", slot);
Mutex::Autolock lock(mMutex);
diff --git a/libs/gui/SurfaceTexture.cpp b/libs/gui/SurfaceTexture.cpp
index be1bcd1..a7bfc61 100644
--- a/libs/gui/SurfaceTexture.cpp
+++ b/libs/gui/SurfaceTexture.cpp
@@ -416,36 +416,7 @@
return mSynchronousMode;
}
-int SurfaceTexture::query(int what, int* outValue)
-{
- Mutex::Autolock lock(mMutex);
- if (mAbandoned) {
- ST_LOGE("query: SurfaceTexture has been abandoned!");
- return NO_INIT;
- }
-
- int value;
- switch (what) {
- case NATIVE_WINDOW_WIDTH:
- value = mDefaultWidth;
- break;
- case NATIVE_WINDOW_HEIGHT:
- value = mDefaultHeight;
- break;
- case NATIVE_WINDOW_FORMAT:
- value = mPixelFormat;
- break;
- case NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS:
- value = mSynchronousMode ?
- (MIN_UNDEQUEUED_BUFFERS-1) : MIN_UNDEQUEUED_BUFFERS;
- break;
- default:
- return BAD_VALUE;
- }
- outValue[0] = value;
- return NO_ERROR;
-}
void SurfaceTexture::abandon() {
Mutex::Autolock lock(mMutex);
diff --git a/libs/ui/Input.cpp b/libs/ui/Input.cpp
index 263c8d9..ca09caf 100644
--- a/libs/ui/Input.cpp
+++ b/libs/ui/Input.cpp
@@ -24,7 +24,7 @@
#include <unistd.h>
#include <ctype.h>
-#include <ui/Input.h>
+#include <androidfw/Input.h>
#include <math.h>
#include <limits.h>
diff --git a/libs/ui/InputTransport.cpp b/libs/ui/InputTransport.cpp
index 09cbb31..1ebd75c 100644
--- a/libs/ui/InputTransport.cpp
+++ b/libs/ui/InputTransport.cpp
@@ -7,325 +7,203 @@
//#define LOG_NDEBUG 0
-// Log debug messages about channel signalling (send signal, receive signal)
-#define DEBUG_CHANNEL_SIGNALS 0
+// Log debug messages about channel messages (send message, receive message)
+#define DEBUG_CHANNEL_MESSAGES 0
// Log debug messages whenever InputChannel objects are created/destroyed
#define DEBUG_CHANNEL_LIFECYCLE 0
-// Log debug messages about transport actions (initialize, reset, publish, ...)
+// Log debug messages about transport actions
#define DEBUG_TRANSPORT_ACTIONS 0
-#include <cutils/ashmem.h>
#include <cutils/log.h>
#include <errno.h>
#include <fcntl.h>
-#include <sys/mman.h>
-#include <ui/InputTransport.h>
+#include <androidfw/InputTransport.h>
#include <unistd.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+
namespace android {
-#define ROUND_UP(value, boundary) (((value) + (boundary) - 1) & ~((boundary) - 1))
-#define MIN_HISTORY_DEPTH 20
+// Socket buffer size. The default is typically about 128KB, which is much larger than
+// we really need. So we make it smaller. It just needs to be big enough to hold
+// a few dozen large multi-finger motion events in the case where an application gets
+// behind processing touches.
+static const size_t SOCKET_BUFFER_SIZE = 32 * 1024;
-// Must be at least sizeof(InputMessage) + sufficient space for pointer data
-static const int DEFAULT_MESSAGE_BUFFER_SIZE = ROUND_UP(
- sizeof(InputMessage) + MIN_HISTORY_DEPTH
- * (sizeof(InputMessage::SampleData) + MAX_POINTERS * sizeof(PointerCoords)),
- 4096);
-// Signal sent by the producer to the consumer to inform it that a new message is
-// available to be consumed in the shared memory buffer.
-static const char INPUT_SIGNAL_DISPATCH = 'D';
+// --- InputMessage ---
-// Signal sent by the consumer to the producer to inform it that it has finished
-// consuming the most recent message and it handled it.
-static const char INPUT_SIGNAL_FINISHED_HANDLED = 'f';
+bool InputMessage::isValid(size_t actualSize) const {
+ if (size() == actualSize) {
+ switch (header.type) {
+ case TYPE_KEY:
+ return true;
+ case TYPE_MOTION:
+ return body.motion.pointerCount > 0
+ && body.motion.pointerCount <= MAX_POINTERS;
+ case TYPE_FINISHED:
+ return true;
+ }
+ }
+ return false;
+}
-// Signal sent by the consumer to the producer to inform it that it has finished
-// consuming the most recent message but it did not handle it.
-static const char INPUT_SIGNAL_FINISHED_UNHANDLED = 'u';
+size_t InputMessage::size() const {
+ switch (header.type) {
+ case TYPE_KEY:
+ return sizeof(Header) + body.key.size();
+ case TYPE_MOTION:
+ return sizeof(Header) + body.motion.size();
+ case TYPE_FINISHED:
+ return sizeof(Header) + body.finished.size();
+ }
+ return sizeof(Header);
+}
// --- InputChannel ---
-InputChannel::InputChannel(const String8& name, int32_t ashmemFd, int32_t receivePipeFd,
- int32_t sendPipeFd) :
- mName(name), mAshmemFd(ashmemFd), mReceivePipeFd(receivePipeFd), mSendPipeFd(sendPipeFd) {
+InputChannel::InputChannel(const String8& name, int fd) :
+ mName(name), mFd(fd) {
#if DEBUG_CHANNEL_LIFECYCLE
- ALOGD("Input channel constructed: name='%s', ashmemFd=%d, receivePipeFd=%d, sendPipeFd=%d",
- mName.string(), ashmemFd, receivePipeFd, sendPipeFd);
+ ALOGD("Input channel constructed: name='%s', fd=%d",
+ mName.string(), fd);
#endif
- int result = fcntl(mReceivePipeFd, F_SETFL, O_NONBLOCK);
- LOG_ALWAYS_FATAL_IF(result != 0, "channel '%s' ~ Could not make receive pipe "
- "non-blocking. errno=%d", mName.string(), errno);
-
- result = fcntl(mSendPipeFd, F_SETFL, O_NONBLOCK);
- LOG_ALWAYS_FATAL_IF(result != 0, "channel '%s' ~ Could not make send pipe "
+ int result = fcntl(mFd, F_SETFL, O_NONBLOCK);
+ LOG_ALWAYS_FATAL_IF(result != 0, "channel '%s' ~ Could not make socket "
"non-blocking. errno=%d", mName.string(), errno);
}
InputChannel::~InputChannel() {
#if DEBUG_CHANNEL_LIFECYCLE
- ALOGD("Input channel destroyed: name='%s', ashmemFd=%d, receivePipeFd=%d, sendPipeFd=%d",
- mName.string(), mAshmemFd, mReceivePipeFd, mSendPipeFd);
+ ALOGD("Input channel destroyed: name='%s', fd=%d",
+ mName.string(), mFd);
#endif
- ::close(mAshmemFd);
- ::close(mReceivePipeFd);
- ::close(mSendPipeFd);
+ ::close(mFd);
}
status_t InputChannel::openInputChannelPair(const String8& name,
sp<InputChannel>& outServerChannel, sp<InputChannel>& outClientChannel) {
- status_t result;
-
- String8 ashmemName("InputChannel ");
- ashmemName.append(name);
- int serverAshmemFd = ashmem_create_region(ashmemName.string(), DEFAULT_MESSAGE_BUFFER_SIZE);
- if (serverAshmemFd < 0) {
- result = -errno;
- ALOGE("channel '%s' ~ Could not create shared memory region. errno=%d",
+ int sockets[2];
+ if (socketpair(AF_UNIX, SOCK_SEQPACKET, 0, sockets)) {
+ status_t result = -errno;
+ ALOGE("channel '%s' ~ Could not create socket pair. errno=%d",
name.string(), errno);
- } else {
- result = ashmem_set_prot_region(serverAshmemFd, PROT_READ | PROT_WRITE);
- if (result < 0) {
- ALOGE("channel '%s' ~ Error %d trying to set protection of ashmem fd %d.",
- name.string(), result, serverAshmemFd);
- } else {
- // Dup the file descriptor because the server and client input channel objects that
- // are returned may have different lifetimes but they share the same shared memory region.
- int clientAshmemFd;
- clientAshmemFd = dup(serverAshmemFd);
- if (clientAshmemFd < 0) {
- result = -errno;
- ALOGE("channel '%s' ~ Could not dup() shared memory region fd. errno=%d",
- name.string(), errno);
- } else {
- int forward[2];
- if (pipe(forward)) {
- result = -errno;
- ALOGE("channel '%s' ~ Could not create forward pipe. errno=%d",
- name.string(), errno);
- } else {
- int reverse[2];
- if (pipe(reverse)) {
- result = -errno;
- ALOGE("channel '%s' ~ Could not create reverse pipe. errno=%d",
- name.string(), errno);
- } else {
- String8 serverChannelName = name;
- serverChannelName.append(" (server)");
- outServerChannel = new InputChannel(serverChannelName,
- serverAshmemFd, reverse[0], forward[1]);
-
- String8 clientChannelName = name;
- clientChannelName.append(" (client)");
- outClientChannel = new InputChannel(clientChannelName,
- clientAshmemFd, forward[0], reverse[1]);
- return OK;
- }
- ::close(forward[0]);
- ::close(forward[1]);
- }
- ::close(clientAshmemFd);
- }
- }
- ::close(serverAshmemFd);
+ outServerChannel.clear();
+ outClientChannel.clear();
+ return result;
}
- outServerChannel.clear();
- outClientChannel.clear();
- return result;
+ int bufferSize = SOCKET_BUFFER_SIZE;
+ setsockopt(sockets[0], SOL_SOCKET, SO_SNDBUF, &bufferSize, sizeof(bufferSize));
+ setsockopt(sockets[0], SOL_SOCKET, SO_RCVBUF, &bufferSize, sizeof(bufferSize));
+ setsockopt(sockets[1], SOL_SOCKET, SO_SNDBUF, &bufferSize, sizeof(bufferSize));
+ setsockopt(sockets[1], SOL_SOCKET, SO_RCVBUF, &bufferSize, sizeof(bufferSize));
+
+ String8 serverChannelName = name;
+ serverChannelName.append(" (server)");
+ outServerChannel = new InputChannel(serverChannelName, sockets[0]);
+
+ String8 clientChannelName = name;
+ clientChannelName.append(" (client)");
+ outClientChannel = new InputChannel(clientChannelName, sockets[1]);
+ return OK;
}
-status_t InputChannel::sendSignal(char signal) {
+status_t InputChannel::sendMessage(const InputMessage* msg) {
+ size_t msgLength = msg->size();
ssize_t nWrite;
do {
- nWrite = ::write(mSendPipeFd, & signal, 1);
+ nWrite = ::send(mFd, msg, msgLength, MSG_DONTWAIT | MSG_NOSIGNAL);
} while (nWrite == -1 && errno == EINTR);
- if (nWrite == 1) {
-#if DEBUG_CHANNEL_SIGNALS
- ALOGD("channel '%s' ~ sent signal '%c'", mName.string(), signal);
+ if (nWrite < 0) {
+ int error = errno;
+#if DEBUG_CHANNEL_MESSAGES
+ ALOGD("channel '%s' ~ error sending message of type %d, errno=%d", mName.string(),
+ msg->header.type, error);
#endif
- return OK;
+ if (error == EAGAIN || error == EWOULDBLOCK) {
+ return WOULD_BLOCK;
+ }
+ if (error == EPIPE || error == ENOTCONN) {
+ return DEAD_OBJECT;
+ }
+ return -error;
}
-#if DEBUG_CHANNEL_SIGNALS
- ALOGD("channel '%s' ~ error sending signal '%c', errno=%d", mName.string(), signal, errno);
-#endif
- return -errno;
-}
-
-status_t InputChannel::receiveSignal(char* outSignal) {
- ssize_t nRead;
- do {
- nRead = ::read(mReceivePipeFd, outSignal, 1);
- } while (nRead == -1 && errno == EINTR);
-
- if (nRead == 1) {
-#if DEBUG_CHANNEL_SIGNALS
- ALOGD("channel '%s' ~ received signal '%c'", mName.string(), *outSignal);
-#endif
- return OK;
- }
-
- if (nRead == 0) { // check for EOF
-#if DEBUG_CHANNEL_SIGNALS
- ALOGD("channel '%s' ~ receive signal failed because peer was closed", mName.string());
+ if (size_t(nWrite) != msgLength) {
+#if DEBUG_CHANNEL_MESSAGES
+ ALOGD("channel '%s' ~ error sending message type %d, send was incomplete",
+ mName.string(), msg->header.type);
#endif
return DEAD_OBJECT;
}
- if (errno == EAGAIN) {
-#if DEBUG_CHANNEL_SIGNALS
- ALOGD("channel '%s' ~ receive signal failed because no signal available", mName.string());
+#if DEBUG_CHANNEL_MESSAGES
+ ALOGD("channel '%s' ~ sent message of type %d", mName.string(), msg->header.type);
#endif
- return WOULD_BLOCK;
+ return OK;
+}
+
+status_t InputChannel::receiveMessage(InputMessage* msg) {
+ ssize_t nRead;
+ do {
+ nRead = ::recv(mFd, msg, sizeof(InputMessage), MSG_DONTWAIT);
+ } while (nRead == -1 && errno == EINTR);
+
+ if (nRead < 0) {
+ int error = errno;
+#if DEBUG_CHANNEL_MESSAGES
+ ALOGD("channel '%s' ~ receive message failed, errno=%d", mName.string(), errno);
+#endif
+ if (error == EAGAIN || error == EWOULDBLOCK) {
+ return WOULD_BLOCK;
+ }
+ if (error == EPIPE || error == ENOTCONN) {
+ return DEAD_OBJECT;
+ }
+ return -error;
}
-#if DEBUG_CHANNEL_SIGNALS
- ALOGD("channel '%s' ~ receive signal failed, errno=%d", mName.string(), errno);
+ if (nRead == 0) { // check for EOF
+#if DEBUG_CHANNEL_MESSAGES
+ ALOGD("channel '%s' ~ receive message failed because peer was closed", mName.string());
#endif
- return -errno;
+ return DEAD_OBJECT;
+ }
+
+ if (!msg->isValid(nRead)) {
+#if DEBUG_CHANNEL_MESSAGES
+ ALOGD("channel '%s' ~ received invalid message", mName.string());
+#endif
+ return BAD_VALUE;
+ }
+
+#if DEBUG_CHANNEL_MESSAGES
+ ALOGD("channel '%s' ~ received message of type %d", mName.string(), msg->header.type);
+#endif
+ return OK;
}
// --- InputPublisher ---
InputPublisher::InputPublisher(const sp<InputChannel>& channel) :
- mChannel(channel), mSharedMessage(NULL),
- mPinned(false), mSemaphoreInitialized(false), mWasDispatched(false),
- mMotionEventSampleDataTail(NULL) {
+ mChannel(channel) {
}
InputPublisher::~InputPublisher() {
- reset();
-
- if (mSharedMessage) {
- munmap(mSharedMessage, mAshmemSize);
- }
-}
-
-status_t InputPublisher::initialize() {
-#if DEBUG_TRANSPORT_ACTIONS
- ALOGD("channel '%s' publisher ~ initialize",
- mChannel->getName().string());
-#endif
-
- int ashmemFd = mChannel->getAshmemFd();
- int result = ashmem_get_size_region(ashmemFd);
- if (result < 0) {
- ALOGE("channel '%s' publisher ~ Error %d getting size of ashmem fd %d.",
- mChannel->getName().string(), result, ashmemFd);
- return UNKNOWN_ERROR;
- }
- mAshmemSize = (size_t) result;
-
- mSharedMessage = static_cast<InputMessage*>(mmap(NULL, mAshmemSize,
- PROT_READ | PROT_WRITE, MAP_SHARED, ashmemFd, 0));
- if (! mSharedMessage) {
- ALOGE("channel '%s' publisher ~ mmap failed on ashmem fd %d.",
- mChannel->getName().string(), ashmemFd);
- return NO_MEMORY;
- }
-
- mPinned = true;
- mSharedMessage->consumed = false;
-
- return reset();
-}
-
-status_t InputPublisher::reset() {
-#if DEBUG_TRANSPORT_ACTIONS
- ALOGD("channel '%s' publisher ~ reset",
- mChannel->getName().string());
-#endif
-
- if (mPinned) {
- // Destroy the semaphore since we are about to unpin the memory region that contains it.
- int result;
- if (mSemaphoreInitialized) {
- if (mSharedMessage->consumed) {
- result = sem_post(& mSharedMessage->semaphore);
- if (result < 0) {
- ALOGE("channel '%s' publisher ~ Error %d in sem_post.",
- mChannel->getName().string(), errno);
- return UNKNOWN_ERROR;
- }
- }
-
- result = sem_destroy(& mSharedMessage->semaphore);
- if (result < 0) {
- ALOGE("channel '%s' publisher ~ Error %d in sem_destroy.",
- mChannel->getName().string(), errno);
- return UNKNOWN_ERROR;
- }
-
- mSemaphoreInitialized = false;
- }
-
- // Unpin the region since we no longer care about its contents.
- int ashmemFd = mChannel->getAshmemFd();
- result = ashmem_unpin_region(ashmemFd, 0, 0);
- if (result < 0) {
- ALOGE("channel '%s' publisher ~ Error %d unpinning ashmem fd %d.",
- mChannel->getName().string(), result, ashmemFd);
- return UNKNOWN_ERROR;
- }
-
- mPinned = false;
- }
-
- mMotionEventSampleDataTail = NULL;
- mWasDispatched = false;
- return OK;
-}
-
-status_t InputPublisher::publishInputEvent(
- int32_t type,
- int32_t deviceId,
- int32_t source) {
- if (mPinned) {
- ALOGE("channel '%s' publisher ~ Attempted to publish a new event but publisher has "
- "not yet been reset.", mChannel->getName().string());
- return INVALID_OPERATION;
- }
-
- // Pin the region.
- // We do not check for ASHMEM_NOT_PURGED because we don't care about the previous
- // contents of the buffer so it does not matter whether it was purged in the meantime.
- int ashmemFd = mChannel->getAshmemFd();
- int result = ashmem_pin_region(ashmemFd, 0, 0);
- if (result < 0) {
- ALOGE("channel '%s' publisher ~ Error %d pinning ashmem fd %d.",
- mChannel->getName().string(), result, ashmemFd);
- return UNKNOWN_ERROR;
- }
-
- mPinned = true;
-
- result = sem_init(& mSharedMessage->semaphore, 1, 1);
- if (result < 0) {
- ALOGE("channel '%s' publisher ~ Error %d in sem_init.",
- mChannel->getName().string(), errno);
- return UNKNOWN_ERROR;
- }
-
- mSemaphoreInitialized = true;
-
- mSharedMessage->consumed = false;
- mSharedMessage->type = type;
- mSharedMessage->deviceId = deviceId;
- mSharedMessage->source = source;
- return OK;
}
status_t InputPublisher::publishKeyEvent(
+ uint32_t seq,
int32_t deviceId,
int32_t source,
int32_t action,
@@ -337,31 +215,37 @@
nsecs_t downTime,
nsecs_t eventTime) {
#if DEBUG_TRANSPORT_ACTIONS
- ALOGD("channel '%s' publisher ~ publishKeyEvent: deviceId=%d, source=0x%x, "
+ ALOGD("channel '%s' publisher ~ publishKeyEvent: seq=%u, deviceId=%d, source=0x%x, "
"action=0x%x, flags=0x%x, keyCode=%d, scanCode=%d, metaState=0x%x, repeatCount=%d,"
"downTime=%lld, eventTime=%lld",
- mChannel->getName().string(),
+ mChannel->getName().string(), seq,
deviceId, source, action, flags, keyCode, scanCode, metaState, repeatCount,
downTime, eventTime);
#endif
- status_t result = publishInputEvent(AINPUT_EVENT_TYPE_KEY, deviceId, source);
- if (result < 0) {
- return result;
+ if (!seq) {
+ ALOGE("Attempted to publish a key event with sequence number 0.");
+ return BAD_VALUE;
}
- mSharedMessage->key.action = action;
- mSharedMessage->key.flags = flags;
- mSharedMessage->key.keyCode = keyCode;
- mSharedMessage->key.scanCode = scanCode;
- mSharedMessage->key.metaState = metaState;
- mSharedMessage->key.repeatCount = repeatCount;
- mSharedMessage->key.downTime = downTime;
- mSharedMessage->key.eventTime = eventTime;
- return OK;
+ InputMessage msg;
+ msg.header.type = InputMessage::TYPE_KEY;
+ msg.body.key.seq = seq;
+ msg.body.key.deviceId = deviceId;
+ msg.body.key.source = source;
+ msg.body.key.action = action;
+ msg.body.key.flags = flags;
+ msg.body.key.keyCode = keyCode;
+ msg.body.key.scanCode = scanCode;
+ msg.body.key.metaState = metaState;
+ msg.body.key.repeatCount = repeatCount;
+ msg.body.key.downTime = downTime;
+ msg.body.key.eventTime = eventTime;
+ return mChannel->sendMessage(&msg);
}
status_t InputPublisher::publishMotionEvent(
+ uint32_t seq,
int32_t deviceId,
int32_t source,
int32_t action,
@@ -379,349 +263,349 @@
const PointerProperties* pointerProperties,
const PointerCoords* pointerCoords) {
#if DEBUG_TRANSPORT_ACTIONS
- ALOGD("channel '%s' publisher ~ publishMotionEvent: deviceId=%d, source=0x%x, "
+ ALOGD("channel '%s' publisher ~ publishMotionEvent: seq=%u, deviceId=%d, source=0x%x, "
"action=0x%x, flags=0x%x, edgeFlags=0x%x, metaState=0x%x, buttonState=0x%x, "
"xOffset=%f, yOffset=%f, "
"xPrecision=%f, yPrecision=%f, downTime=%lld, eventTime=%lld, "
"pointerCount=%d",
- mChannel->getName().string(),
+ mChannel->getName().string(), seq,
deviceId, source, action, flags, edgeFlags, metaState, buttonState,
xOffset, yOffset, xPrecision, yPrecision, downTime, eventTime, pointerCount);
#endif
+ if (!seq) {
+ ALOGE("Attempted to publish a motion event with sequence number 0.");
+ return BAD_VALUE;
+ }
+
if (pointerCount > MAX_POINTERS || pointerCount < 1) {
ALOGE("channel '%s' publisher ~ Invalid number of pointers provided: %d.",
mChannel->getName().string(), pointerCount);
return BAD_VALUE;
}
- status_t result = publishInputEvent(AINPUT_EVENT_TYPE_MOTION, deviceId, source);
- if (result < 0) {
- return result;
- }
-
- mSharedMessage->motion.action = action;
- mSharedMessage->motion.flags = flags;
- mSharedMessage->motion.edgeFlags = edgeFlags;
- mSharedMessage->motion.metaState = metaState;
- mSharedMessage->motion.buttonState = buttonState;
- mSharedMessage->motion.xOffset = xOffset;
- mSharedMessage->motion.yOffset = yOffset;
- mSharedMessage->motion.xPrecision = xPrecision;
- mSharedMessage->motion.yPrecision = yPrecision;
- mSharedMessage->motion.downTime = downTime;
- mSharedMessage->motion.pointerCount = pointerCount;
-
- mSharedMessage->motion.sampleCount = 1;
- mSharedMessage->motion.sampleData[0].eventTime = eventTime;
-
+ InputMessage msg;
+ msg.header.type = InputMessage::TYPE_MOTION;
+ msg.body.motion.seq = seq;
+ msg.body.motion.deviceId = deviceId;
+ msg.body.motion.source = source;
+ msg.body.motion.action = action;
+ msg.body.motion.flags = flags;
+ msg.body.motion.edgeFlags = edgeFlags;
+ msg.body.motion.metaState = metaState;
+ msg.body.motion.buttonState = buttonState;
+ msg.body.motion.xOffset = xOffset;
+ msg.body.motion.yOffset = yOffset;
+ msg.body.motion.xPrecision = xPrecision;
+ msg.body.motion.yPrecision = yPrecision;
+ msg.body.motion.downTime = downTime;
+ msg.body.motion.eventTime = eventTime;
+ msg.body.motion.pointerCount = pointerCount;
for (size_t i = 0; i < pointerCount; i++) {
- mSharedMessage->motion.pointerProperties[i].copyFrom(pointerProperties[i]);
- mSharedMessage->motion.sampleData[0].coords[i].copyFrom(pointerCoords[i]);
+ msg.body.motion.pointers[i].properties.copyFrom(pointerProperties[i]);
+ msg.body.motion.pointers[i].coords.copyFrom(pointerCoords[i]);
}
-
- // Cache essential information about the motion event to ensure that a malicious consumer
- // cannot confuse the publisher by modifying the contents of the shared memory buffer while
- // it is being updated.
- if (action == AMOTION_EVENT_ACTION_MOVE
- || action == AMOTION_EVENT_ACTION_HOVER_MOVE) {
- mMotionEventPointerCount = pointerCount;
- mMotionEventSampleDataStride = InputMessage::sampleDataStride(pointerCount);
- mMotionEventSampleDataTail = InputMessage::sampleDataPtrIncrement(
- mSharedMessage->motion.sampleData, mMotionEventSampleDataStride);
- } else {
- mMotionEventSampleDataTail = NULL;
- }
- return OK;
+ return mChannel->sendMessage(&msg);
}
-status_t InputPublisher::appendMotionSample(
- nsecs_t eventTime,
- const PointerCoords* pointerCoords) {
-#if DEBUG_TRANSPORT_ACTIONS
- ALOGD("channel '%s' publisher ~ appendMotionSample: eventTime=%lld",
- mChannel->getName().string(), eventTime);
-#endif
-
- if (! mPinned || ! mMotionEventSampleDataTail) {
- ALOGE("channel '%s' publisher ~ Cannot append motion sample because there is no current "
- "AMOTION_EVENT_ACTION_MOVE or AMOTION_EVENT_ACTION_HOVER_MOVE event.",
- mChannel->getName().string());
- return INVALID_OPERATION;
- }
-
- InputMessage::SampleData* newTail = InputMessage::sampleDataPtrIncrement(
- mMotionEventSampleDataTail, mMotionEventSampleDataStride);
- size_t newBytesUsed = reinterpret_cast<char*>(newTail) -
- reinterpret_cast<char*>(mSharedMessage);
-
- if (newBytesUsed > mAshmemSize) {
-#if DEBUG_TRANSPORT_ACTIONS
- ALOGD("channel '%s' publisher ~ Cannot append motion sample because the shared memory "
- "buffer is full. Buffer size: %d bytes, pointers: %d, samples: %d",
- mChannel->getName().string(),
- mAshmemSize, mMotionEventPointerCount, mSharedMessage->motion.sampleCount);
-#endif
- return NO_MEMORY;
- }
-
- int result;
- if (mWasDispatched) {
- result = sem_trywait(& mSharedMessage->semaphore);
- if (result < 0) {
- if (errno == EAGAIN) {
- // Only possible source of contention is the consumer having consumed (or being in the
- // process of consuming) the message and left the semaphore count at 0.
-#if DEBUG_TRANSPORT_ACTIONS
- ALOGD("channel '%s' publisher ~ Cannot append motion sample because the message has "
- "already been consumed.", mChannel->getName().string());
-#endif
- return FAILED_TRANSACTION;
- } else {
- ALOGE("channel '%s' publisher ~ Error %d in sem_trywait.",
- mChannel->getName().string(), errno);
- return UNKNOWN_ERROR;
- }
- }
- }
-
- mMotionEventSampleDataTail->eventTime = eventTime;
- for (size_t i = 0; i < mMotionEventPointerCount; i++) {
- mMotionEventSampleDataTail->coords[i].copyFrom(pointerCoords[i]);
- }
- mMotionEventSampleDataTail = newTail;
-
- mSharedMessage->motion.sampleCount += 1;
-
- if (mWasDispatched) {
- result = sem_post(& mSharedMessage->semaphore);
- if (result < 0) {
- ALOGE("channel '%s' publisher ~ Error %d in sem_post.",
- mChannel->getName().string(), errno);
- return UNKNOWN_ERROR;
- }
- }
- return OK;
-}
-
-status_t InputPublisher::sendDispatchSignal() {
-#if DEBUG_TRANSPORT_ACTIONS
- ALOGD("channel '%s' publisher ~ sendDispatchSignal",
- mChannel->getName().string());
-#endif
-
- mWasDispatched = true;
- return mChannel->sendSignal(INPUT_SIGNAL_DISPATCH);
-}
-
-status_t InputPublisher::receiveFinishedSignal(bool* outHandled) {
+status_t InputPublisher::receiveFinishedSignal(uint32_t* outSeq, bool* outHandled) {
#if DEBUG_TRANSPORT_ACTIONS
ALOGD("channel '%s' publisher ~ receiveFinishedSignal",
mChannel->getName().string());
#endif
- char signal;
- status_t result = mChannel->receiveSignal(& signal);
+ InputMessage msg;
+ status_t result = mChannel->receiveMessage(&msg);
if (result) {
+ *outSeq = 0;
*outHandled = false;
return result;
}
- if (signal == INPUT_SIGNAL_FINISHED_HANDLED) {
- *outHandled = true;
- } else if (signal == INPUT_SIGNAL_FINISHED_UNHANDLED) {
- *outHandled = false;
- } else {
- ALOGE("channel '%s' publisher ~ Received unexpected signal '%c' from consumer",
- mChannel->getName().string(), signal);
+ if (msg.header.type != InputMessage::TYPE_FINISHED) {
+ ALOGE("channel '%s' publisher ~ Received unexpected message of type %d from consumer",
+ mChannel->getName().string(), msg.header.type);
return UNKNOWN_ERROR;
}
+ *outSeq = msg.body.finished.seq;
+ *outHandled = msg.body.finished.handled;
return OK;
}
// --- InputConsumer ---
InputConsumer::InputConsumer(const sp<InputChannel>& channel) :
- mChannel(channel), mSharedMessage(NULL) {
+ mChannel(channel), mMsgDeferred(false) {
}
InputConsumer::~InputConsumer() {
- if (mSharedMessage) {
- munmap(mSharedMessage, mAshmemSize);
- }
}
-status_t InputConsumer::initialize() {
+status_t InputConsumer::consume(InputEventFactoryInterface* factory,
+ bool consumeBatches, uint32_t* outSeq, InputEvent** outEvent) {
#if DEBUG_TRANSPORT_ACTIONS
- ALOGD("channel '%s' consumer ~ initialize",
- mChannel->getName().string());
+ ALOGD("channel '%s' consumer ~ consume: consumeBatches=%s",
+ mChannel->getName().string(), consumeBatches ? "true" : "false");
#endif
- int ashmemFd = mChannel->getAshmemFd();
- int result = ashmem_get_size_region(ashmemFd);
- if (result < 0) {
- ALOGE("channel '%s' consumer ~ Error %d getting size of ashmem fd %d.",
- mChannel->getName().string(), result, ashmemFd);
- return UNKNOWN_ERROR;
- }
-
- mAshmemSize = (size_t) result;
-
- mSharedMessage = static_cast<InputMessage*>(mmap(NULL, mAshmemSize,
- PROT_READ | PROT_WRITE, MAP_SHARED, ashmemFd, 0));
- if (! mSharedMessage) {
- ALOGE("channel '%s' consumer ~ mmap failed on ashmem fd %d.",
- mChannel->getName().string(), ashmemFd);
- return NO_MEMORY;
- }
-
- return OK;
-}
-
-status_t InputConsumer::consume(InputEventFactoryInterface* factory, InputEvent** outEvent) {
-#if DEBUG_TRANSPORT_ACTIONS
- ALOGD("channel '%s' consumer ~ consume",
- mChannel->getName().string());
-#endif
-
+ *outSeq = 0;
*outEvent = NULL;
- int ashmemFd = mChannel->getAshmemFd();
- int result = ashmem_pin_region(ashmemFd, 0, 0);
- if (result != ASHMEM_NOT_PURGED) {
- if (result == ASHMEM_WAS_PURGED) {
- ALOGE("channel '%s' consumer ~ Error %d pinning ashmem fd %d because it was purged "
- "which probably indicates that the publisher and consumer are out of sync.",
- mChannel->getName().string(), result, ashmemFd);
- return INVALID_OPERATION;
+ // Fetch the next input message.
+ // Loop until an event can be returned or no additional events are received.
+ while (!*outEvent) {
+ if (mMsgDeferred) {
+ // mMsg contains a valid input message from the previous call to consume
+ // that has not yet been processed.
+ mMsgDeferred = false;
+ } else {
+ // Receive a fresh message.
+ status_t result = mChannel->receiveMessage(&mMsg);
+ if (result) {
+ // Consume the next batched event unless batches are being held for later.
+ if (!mBatches.isEmpty() && (consumeBatches || result != WOULD_BLOCK)) {
+ MotionEvent* motionEvent = factory->createMotionEvent();
+ if (! motionEvent) return NO_MEMORY;
+
+ const Batch& batch = mBatches.top();
+ motionEvent->copyFrom(&batch.event, true /*keepHistory*/);
+ *outSeq = batch.seq;
+ *outEvent = motionEvent;
+ mBatches.pop();
+#if DEBUG_TRANSPORT_ACTIONS
+ ALOGD("channel '%s' consumer ~ consumed batch event, seq=%u",
+ mChannel->getName().string(), *outSeq);
+#endif
+ break;
+ }
+ return result;
+ }
}
- ALOGE("channel '%s' consumer ~ Error %d pinning ashmem fd %d.",
- mChannel->getName().string(), result, ashmemFd);
- return UNKNOWN_ERROR;
- }
+ switch (mMsg.header.type) {
+ case InputMessage::TYPE_KEY: {
+ KeyEvent* keyEvent = factory->createKeyEvent();
+ if (!keyEvent) return NO_MEMORY;
- if (mSharedMessage->consumed) {
- ALOGE("channel '%s' consumer ~ The current message has already been consumed.",
- mChannel->getName().string());
- return INVALID_OPERATION;
- }
-
- // Acquire but *never release* the semaphore. Contention on the semaphore is used to signal
- // to the publisher that the message has been consumed (or is in the process of being
- // consumed). Eventually the publisher will reinitialize the semaphore for the next message.
- result = sem_wait(& mSharedMessage->semaphore);
- if (result < 0) {
- ALOGE("channel '%s' consumer ~ Error %d in sem_wait.",
- mChannel->getName().string(), errno);
- return UNKNOWN_ERROR;
- }
-
- mSharedMessage->consumed = true;
-
- switch (mSharedMessage->type) {
- case AINPUT_EVENT_TYPE_KEY: {
- KeyEvent* keyEvent = factory->createKeyEvent();
- if (! keyEvent) return NO_MEMORY;
-
- populateKeyEvent(keyEvent);
-
- *outEvent = keyEvent;
- break;
- }
-
- case AINPUT_EVENT_TYPE_MOTION: {
- MotionEvent* motionEvent = factory->createMotionEvent();
- if (! motionEvent) return NO_MEMORY;
-
- populateMotionEvent(motionEvent);
-
- *outEvent = motionEvent;
- break;
- }
-
- default:
- ALOGE("channel '%s' consumer ~ Received message of unknown type %d",
- mChannel->getName().string(), mSharedMessage->type);
- return UNKNOWN_ERROR;
- }
-
- return OK;
-}
-
-status_t InputConsumer::sendFinishedSignal(bool handled) {
+ initializeKeyEvent(keyEvent, &mMsg);
+ *outSeq = mMsg.body.key.seq;
+ *outEvent = keyEvent;
#if DEBUG_TRANSPORT_ACTIONS
- ALOGD("channel '%s' consumer ~ sendFinishedSignal: handled=%d",
- mChannel->getName().string(), handled);
+ ALOGD("channel '%s' consumer ~ consumed key event, seq=%u",
+ mChannel->getName().string(), *outSeq);
#endif
+ break;
+ }
- return mChannel->sendSignal(handled
- ? INPUT_SIGNAL_FINISHED_HANDLED
- : INPUT_SIGNAL_FINISHED_UNHANDLED);
-}
+ case AINPUT_EVENT_TYPE_MOTION: {
+ ssize_t batchIndex = findBatch(mMsg.body.motion.deviceId, mMsg.body.motion.source);
+ if (batchIndex >= 0) {
+ Batch& batch = mBatches.editItemAt(batchIndex);
+ if (canAppendSamples(&batch.event, &mMsg)) {
+ // Append to the batch and save the new sequence number for the tail end.
+ uint32_t chain = batch.seq;
+ appendSamples(&batch.event, &mMsg);
+ batch.seq = mMsg.body.motion.seq;
-status_t InputConsumer::receiveDispatchSignal() {
+ // Update the sequence number chain.
+ SeqChain seqChain;
+ seqChain.seq = batch.seq;
+ seqChain.chain = chain;
+ mSeqChains.push(seqChain);
#if DEBUG_TRANSPORT_ACTIONS
- ALOGD("channel '%s' consumer ~ receiveDispatchSignal",
- mChannel->getName().string());
+ ALOGD("channel '%s' consumer ~ appended to batch event",
+ mChannel->getName().string());
#endif
+ break;
+ } else {
+ MotionEvent* motionEvent = factory->createMotionEvent();
+ if (! motionEvent) return NO_MEMORY;
- char signal;
- status_t result = mChannel->receiveSignal(& signal);
- if (result) {
- return result;
- }
- if (signal != INPUT_SIGNAL_DISPATCH) {
- ALOGE("channel '%s' consumer ~ Received unexpected signal '%c' from publisher",
- mChannel->getName().string(), signal);
- return UNKNOWN_ERROR;
+ // We cannot append to the batch in progress, so we need to consume
+ // the previous batch right now and defer the new message until later.
+ mMsgDeferred = true;
+
+ // Return the end of the previous batch.
+ motionEvent->copyFrom(&batch.event, true /*keepHistory*/);
+ *outSeq = batch.seq;
+ *outEvent = motionEvent;
+ mBatches.removeAt(batchIndex);
+#if DEBUG_TRANSPORT_ACTIONS
+ ALOGD("channel '%s' consumer ~ consumed batch event and "
+ "deferred current event, seq=%u",
+ mChannel->getName().string(), *outSeq);
+#endif
+ break;
+ }
+ }
+
+ // Start a new batch if needed.
+ if (mMsg.body.motion.action == AMOTION_EVENT_ACTION_MOVE
+ || mMsg.body.motion.action == AMOTION_EVENT_ACTION_HOVER_MOVE) {
+ mBatches.push();
+ Batch& batch = mBatches.editTop();
+ batch.seq = mMsg.body.motion.seq;
+ initializeMotionEvent(&batch.event, &mMsg);
+#if DEBUG_TRANSPORT_ACTIONS
+ ALOGD("channel '%s' consumer ~ started batch event",
+ mChannel->getName().string());
+#endif
+ break;
+ }
+
+ MotionEvent* motionEvent = factory->createMotionEvent();
+ if (! motionEvent) return NO_MEMORY;
+
+ initializeMotionEvent(motionEvent, &mMsg);
+ *outSeq = mMsg.body.motion.seq;
+ *outEvent = motionEvent;
+#if DEBUG_TRANSPORT_ACTIONS
+ ALOGD("channel '%s' consumer ~ consumed motion event, seq=%u",
+ mChannel->getName().string(), *outSeq);
+#endif
+ break;
+ }
+
+ default:
+ ALOGE("channel '%s' consumer ~ Received unexpected message of type %d",
+ mChannel->getName().string(), mMsg.header.type);
+ return UNKNOWN_ERROR;
+ }
}
return OK;
}
-void InputConsumer::populateKeyEvent(KeyEvent* keyEvent) const {
- keyEvent->initialize(
- mSharedMessage->deviceId,
- mSharedMessage->source,
- mSharedMessage->key.action,
- mSharedMessage->key.flags,
- mSharedMessage->key.keyCode,
- mSharedMessage->key.scanCode,
- mSharedMessage->key.metaState,
- mSharedMessage->key.repeatCount,
- mSharedMessage->key.downTime,
- mSharedMessage->key.eventTime);
-}
+status_t InputConsumer::sendFinishedSignal(uint32_t seq, bool handled) {
+#if DEBUG_TRANSPORT_ACTIONS
+ ALOGD("channel '%s' consumer ~ sendFinishedSignal: seq=%u, handled=%s",
+ mChannel->getName().string(), seq, handled ? "true" : "false");
+#endif
-void InputConsumer::populateMotionEvent(MotionEvent* motionEvent) const {
- motionEvent->initialize(
- mSharedMessage->deviceId,
- mSharedMessage->source,
- mSharedMessage->motion.action,
- mSharedMessage->motion.flags,
- mSharedMessage->motion.edgeFlags,
- mSharedMessage->motion.metaState,
- mSharedMessage->motion.buttonState,
- mSharedMessage->motion.xOffset,
- mSharedMessage->motion.yOffset,
- mSharedMessage->motion.xPrecision,
- mSharedMessage->motion.yPrecision,
- mSharedMessage->motion.downTime,
- mSharedMessage->motion.sampleData[0].eventTime,
- mSharedMessage->motion.pointerCount,
- mSharedMessage->motion.pointerProperties,
- mSharedMessage->motion.sampleData[0].coords);
+ if (!seq) {
+ ALOGE("Attempted to send a finished signal with sequence number 0.");
+ return BAD_VALUE;
+ }
- size_t sampleCount = mSharedMessage->motion.sampleCount;
- if (sampleCount > 1) {
- InputMessage::SampleData* sampleData = mSharedMessage->motion.sampleData;
- size_t sampleDataStride = InputMessage::sampleDataStride(
- mSharedMessage->motion.pointerCount);
-
- while (--sampleCount > 0) {
- sampleData = InputMessage::sampleDataPtrIncrement(sampleData, sampleDataStride);
- motionEvent->addSample(sampleData->eventTime, sampleData->coords);
+ // Send finished signals for the batch sequence chain first.
+ size_t seqChainCount = mSeqChains.size();
+ if (seqChainCount) {
+ uint32_t currentSeq = seq;
+ uint32_t chainSeqs[seqChainCount];
+ size_t chainIndex = 0;
+ for (size_t i = seqChainCount; i-- > 0; ) {
+ const SeqChain& seqChain = mSeqChains.itemAt(i);
+ if (seqChain.seq == currentSeq) {
+ currentSeq = seqChain.chain;
+ chainSeqs[chainIndex++] = currentSeq;
+ mSeqChains.removeAt(i);
+ }
+ }
+ status_t status = OK;
+ while (!status && chainIndex-- > 0) {
+ status = sendUnchainedFinishedSignal(chainSeqs[chainIndex], handled);
+ }
+ if (status) {
+ // An error occurred so at least one signal was not sent, reconstruct the chain.
+ do {
+ SeqChain seqChain;
+ seqChain.seq = chainIndex != 0 ? chainSeqs[chainIndex - 1] : seq;
+ seqChain.chain = chainSeqs[chainIndex];
+ mSeqChains.push(seqChain);
+ } while (chainIndex-- > 0);
+ return status;
}
}
+
+ // Send finished signal for the last message in the batch.
+ return sendUnchainedFinishedSignal(seq, handled);
+}
+
+status_t InputConsumer::sendUnchainedFinishedSignal(uint32_t seq, bool handled) {
+ InputMessage msg;
+ msg.header.type = InputMessage::TYPE_FINISHED;
+ msg.body.finished.seq = seq;
+ msg.body.finished.handled = handled;
+ return mChannel->sendMessage(&msg);
+}
+
+bool InputConsumer::hasPendingBatch() const {
+ return !mBatches.isEmpty();
+}
+
+ssize_t InputConsumer::findBatch(int32_t deviceId, int32_t source) const {
+ for (size_t i = 0; i < mBatches.size(); i++) {
+ const Batch& batch = mBatches.itemAt(i);
+ if (batch.event.getDeviceId() == deviceId && batch.event.getSource() == source) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+void InputConsumer::initializeKeyEvent(KeyEvent* event, const InputMessage* msg) {
+ event->initialize(
+ msg->body.key.deviceId,
+ msg->body.key.source,
+ msg->body.key.action,
+ msg->body.key.flags,
+ msg->body.key.keyCode,
+ msg->body.key.scanCode,
+ msg->body.key.metaState,
+ msg->body.key.repeatCount,
+ msg->body.key.downTime,
+ msg->body.key.eventTime);
+}
+
+void InputConsumer::initializeMotionEvent(MotionEvent* event, const InputMessage* msg) {
+ size_t pointerCount = msg->body.motion.pointerCount;
+ PointerProperties pointerProperties[pointerCount];
+ PointerCoords pointerCoords[pointerCount];
+ for (size_t i = 0; i < pointerCount; i++) {
+ pointerProperties[i].copyFrom(msg->body.motion.pointers[i].properties);
+ pointerCoords[i].copyFrom(msg->body.motion.pointers[i].coords);
+ }
+
+ event->initialize(
+ msg->body.motion.deviceId,
+ msg->body.motion.source,
+ msg->body.motion.action,
+ msg->body.motion.flags,
+ msg->body.motion.edgeFlags,
+ msg->body.motion.metaState,
+ msg->body.motion.buttonState,
+ msg->body.motion.xOffset,
+ msg->body.motion.yOffset,
+ msg->body.motion.xPrecision,
+ msg->body.motion.yPrecision,
+ msg->body.motion.downTime,
+ msg->body.motion.eventTime,
+ pointerCount,
+ pointerProperties,
+ pointerCoords);
+}
+
+bool InputConsumer::canAppendSamples(const MotionEvent* event, const InputMessage *msg) {
+ size_t pointerCount = msg->body.motion.pointerCount;
+ if (event->getPointerCount() != pointerCount
+ || event->getAction() != msg->body.motion.action) {
+ return false;
+ }
+ for (size_t i = 0; i < pointerCount; i++) {
+ if (*event->getPointerProperties(i) != msg->body.motion.pointers[i].properties) {
+ return false;
+ }
+ }
+ return true;
+}
+
+void InputConsumer::appendSamples(MotionEvent* event, const InputMessage* msg) {
+ size_t pointerCount = msg->body.motion.pointerCount;
+ PointerCoords pointerCoords[pointerCount];
+ for (size_t i = 0; i < pointerCount; i++) {
+ pointerCoords[i].copyFrom(msg->body.motion.pointers[i].coords);
+ }
+
+ event->setMetaState(event->getMetaState() | msg->body.motion.metaState);
+ event->addSample(msg->body.motion.eventTime, pointerCoords);
}
} // namespace android
diff --git a/libs/ui/KeyCharacterMap.cpp b/libs/ui/KeyCharacterMap.cpp
index 485234c..6984084 100644
--- a/libs/ui/KeyCharacterMap.cpp
+++ b/libs/ui/KeyCharacterMap.cpp
@@ -19,8 +19,8 @@
#include <stdlib.h>
#include <string.h>
#include <android/keycodes.h>
-#include <ui/Keyboard.h>
-#include <ui/KeyCharacterMap.h>
+#include <androidfw/Keyboard.h>
+#include <androidfw/KeyCharacterMap.h>
#include <utils/Log.h>
#include <utils/Errors.h>
#include <utils/Tokenizer.h>
diff --git a/libs/ui/KeyLayoutMap.cpp b/libs/ui/KeyLayoutMap.cpp
index 44a9420..15d81ee 100644
--- a/libs/ui/KeyLayoutMap.cpp
+++ b/libs/ui/KeyLayoutMap.cpp
@@ -18,8 +18,8 @@
#include <stdlib.h>
#include <android/keycodes.h>
-#include <ui/Keyboard.h>
-#include <ui/KeyLayoutMap.h>
+#include <androidfw/Keyboard.h>
+#include <androidfw/KeyLayoutMap.h>
#include <utils/Log.h>
#include <utils/Errors.h>
#include <utils/Tokenizer.h>
diff --git a/libs/ui/Keyboard.cpp b/libs/ui/Keyboard.cpp
index e4611f7..e97a5eb 100644
--- a/libs/ui/Keyboard.cpp
+++ b/libs/ui/Keyboard.cpp
@@ -20,10 +20,10 @@
#include <unistd.h>
#include <limits.h>
-#include <ui/Keyboard.h>
-#include <ui/KeycodeLabels.h>
-#include <ui/KeyLayoutMap.h>
-#include <ui/KeyCharacterMap.h>
+#include <androidfw/Keyboard.h>
+#include <androidfw/KeycodeLabels.h>
+#include <androidfw/KeyLayoutMap.h>
+#include <androidfw/KeyCharacterMap.h>
#include <utils/Errors.h>
#include <utils/Log.h>
#include <cutils/properties.h>
diff --git a/libs/ui/VirtualKeyMap.cpp b/libs/ui/VirtualKeyMap.cpp
index 62d5b59..2ba1673 100644
--- a/libs/ui/VirtualKeyMap.cpp
+++ b/libs/ui/VirtualKeyMap.cpp
@@ -18,7 +18,7 @@
#include <stdlib.h>
#include <string.h>
-#include <ui/VirtualKeyMap.h>
+#include <androidfw/VirtualKeyMap.h>
#include <utils/Log.h>
#include <utils/Errors.h>
#include <utils/Tokenizer.h>
diff --git a/libs/ui/tests/InputChannel_test.cpp b/libs/ui/tests/InputChannel_test.cpp
index eff22ee..0e5d19d 100644
--- a/libs/ui/tests/InputChannel_test.cpp
+++ b/libs/ui/tests/InputChannel_test.cpp
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-#include <ui/InputTransport.h>
+#include <androidfw/InputTransport.h>
#include <utils/Timers.h>
#include <utils/StopWatch.h>
+#include <utils/StrongPointer.h>
#include <gtest/gtest.h>
#include <unistd.h>
#include <time.h>
-#include <sys/mman.h>
-#include <cutils/ashmem.h>
+#include <errno.h>
#include "../../utils/tests/TestHelpers.h"
@@ -36,35 +36,24 @@
TEST_F(InputChannelTest, ConstructorAndDestructor_TakesOwnershipOfFileDescriptors) {
// Our purpose here is to verify that the input channel destructor closes the
- // file descriptors provided to it. One easy way is to provide it with one end
+ // file descriptor provided to it. One easy way is to provide it with one end
// of a pipe and to check for EPIPE on the other end after the channel is destroyed.
- Pipe fakeAshmem, sendPipe, receivePipe;
+ Pipe pipe;
- sp<InputChannel> inputChannel = new InputChannel(String8("channel name"),
- fakeAshmem.sendFd, receivePipe.receiveFd, sendPipe.sendFd);
+ sp<InputChannel> inputChannel = new InputChannel(String8("channel name"), pipe.sendFd);
EXPECT_STREQ("channel name", inputChannel->getName().string())
<< "channel should have provided name";
- EXPECT_EQ(fakeAshmem.sendFd, inputChannel->getAshmemFd())
- << "channel should have provided ashmem fd";
- EXPECT_EQ(receivePipe.receiveFd, inputChannel->getReceivePipeFd())
- << "channel should have provided receive pipe fd";
- EXPECT_EQ(sendPipe.sendFd, inputChannel->getSendPipeFd())
- << "channel should have provided send pipe fd";
+ EXPECT_EQ(pipe.sendFd, inputChannel->getFd())
+ << "channel should have provided fd";
inputChannel.clear(); // destroys input channel
- EXPECT_EQ(-EPIPE, fakeAshmem.readSignal())
- << "channel should have closed ashmem fd when destroyed";
- EXPECT_EQ(-EPIPE, receivePipe.writeSignal())
- << "channel should have closed receive pipe fd when destroyed";
- EXPECT_EQ(-EPIPE, sendPipe.readSignal())
- << "channel should have closed send pipe fd when destroyed";
+ EXPECT_EQ(-EPIPE, pipe.readSignal())
+ << "channel should have closed fd when destroyed";
// clean up fds of Pipe endpoints that were closed so we don't try to close them again
- fakeAshmem.sendFd = -1;
- receivePipe.receiveFd = -1;
- sendPipe.sendFd = -1;
+ pipe.sendFd = -1;
}
TEST_F(InputChannelTest, OpenInputChannelPair_ReturnsAPairOfConnectedChannels) {
@@ -82,43 +71,40 @@
EXPECT_STREQ("channel name (client)", clientChannel->getName().string())
<< "client channel should have suffixed name";
- // Ashmem uniqueness
- EXPECT_NE(serverChannel->getAshmemFd(), clientChannel->getAshmemFd())
- << "server and client channel should have different ashmem fds because it was dup'd";
-
- // Ashmem usability
- ssize_t serverAshmemSize = ashmem_get_size_region(serverChannel->getAshmemFd());
- ssize_t clientAshmemSize = ashmem_get_size_region(clientChannel->getAshmemFd());
- uint32_t* serverAshmem = static_cast<uint32_t*>(mmap(NULL, serverAshmemSize,
- PROT_READ | PROT_WRITE, MAP_SHARED, serverChannel->getAshmemFd(), 0));
- uint32_t* clientAshmem = static_cast<uint32_t*>(mmap(NULL, clientAshmemSize,
- PROT_READ | PROT_WRITE, MAP_SHARED, clientChannel->getAshmemFd(), 0));
- ASSERT_TRUE(serverAshmem != NULL)
- << "server channel ashmem should be mappable";
- ASSERT_TRUE(clientAshmem != NULL)
- << "client channel ashmem should be mappable";
- *serverAshmem = 0xf00dd00d;
- EXPECT_EQ(0xf00dd00d, *clientAshmem)
- << "ashmem buffer should be shared by client and server";
- munmap(serverAshmem, serverAshmemSize);
- munmap(clientAshmem, clientAshmemSize);
-
// Server->Client communication
- EXPECT_EQ(OK, serverChannel->sendSignal('S'))
- << "server channel should be able to send signal to client channel";
- char signal;
- EXPECT_EQ(OK, clientChannel->receiveSignal(& signal))
- << "client channel should be able to receive signal from server channel";
- EXPECT_EQ('S', signal)
- << "client channel should receive the correct signal from server channel";
+ InputMessage serverMsg;
+ memset(&serverMsg, 0, sizeof(InputMessage));
+ serverMsg.header.type = InputMessage::TYPE_KEY;
+ serverMsg.body.key.action = AKEY_EVENT_ACTION_DOWN;
+ EXPECT_EQ(OK, serverChannel->sendMessage(&serverMsg))
+ << "server channel should be able to send message to client channel";
+
+ InputMessage clientMsg;
+ EXPECT_EQ(OK, clientChannel->receiveMessage(&clientMsg))
+ << "client channel should be able to receive message from server channel";
+ EXPECT_EQ(serverMsg.header.type, clientMsg.header.type)
+ << "client channel should receive the correct message from server channel";
+ EXPECT_EQ(serverMsg.body.key.action, clientMsg.body.key.action)
+ << "client channel should receive the correct message from server channel";
// Client->Server communication
- EXPECT_EQ(OK, clientChannel->sendSignal('c'))
- << "client channel should be able to send signal to server channel";
- EXPECT_EQ(OK, serverChannel->receiveSignal(& signal))
- << "server channel should be able to receive signal from client channel";
- EXPECT_EQ('c', signal)
- << "server channel should receive the correct signal from client channel";
+ InputMessage clientReply;
+ memset(&clientReply, 0, sizeof(InputMessage));
+ clientReply.header.type = InputMessage::TYPE_FINISHED;
+ clientReply.body.finished.seq = 0x11223344;
+ clientReply.body.finished.handled = true;
+ EXPECT_EQ(OK, clientChannel->sendMessage(&clientReply))
+ << "client channel should be able to send message to server channel";
+
+ InputMessage serverReply;
+ EXPECT_EQ(OK, serverChannel->receiveMessage(&serverReply))
+ << "server channel should be able to receive message from client channel";
+ EXPECT_EQ(clientReply.header.type, serverReply.header.type)
+ << "server channel should receive the correct message from client channel";
+ EXPECT_EQ(clientReply.body.finished.seq, serverReply.body.finished.seq)
+ << "server channel should receive the correct message from client channel";
+ EXPECT_EQ(clientReply.body.finished.handled, serverReply.body.finished.handled)
+ << "server channel should receive the correct message from client channel";
}
TEST_F(InputChannelTest, ReceiveSignal_WhenNoSignalPresent_ReturnsAnError) {
@@ -130,9 +116,9 @@
ASSERT_EQ(OK, result)
<< "should have successfully opened a channel pair";
- char signal;
- EXPECT_EQ(WOULD_BLOCK, clientChannel->receiveSignal(& signal))
- << "receiveSignal should have returned WOULD_BLOCK";
+ InputMessage msg;
+ EXPECT_EQ(WOULD_BLOCK, clientChannel->receiveMessage(&msg))
+ << "receiveMessage should have returned WOULD_BLOCK";
}
TEST_F(InputChannelTest, ReceiveSignal_WhenPeerClosed_ReturnsAnError) {
@@ -146,9 +132,9 @@
serverChannel.clear(); // close server channel
- char signal;
- EXPECT_EQ(DEAD_OBJECT, clientChannel->receiveSignal(& signal))
- << "receiveSignal should have returned DEAD_OBJECT";
+ InputMessage msg;
+ EXPECT_EQ(DEAD_OBJECT, clientChannel->receiveMessage(&msg))
+ << "receiveMessage should have returned DEAD_OBJECT";
}
TEST_F(InputChannelTest, SendSignal_WhenPeerClosed_ReturnsAnError) {
@@ -162,8 +148,10 @@
serverChannel.clear(); // close server channel
- EXPECT_EQ(DEAD_OBJECT, clientChannel->sendSignal('S'))
- << "sendSignal should have returned DEAD_OBJECT";
+ InputMessage msg;
+ msg.header.type = InputMessage::TYPE_KEY;
+ EXPECT_EQ(DEAD_OBJECT, clientChannel->sendMessage(&msg))
+ << "sendMessage should have returned DEAD_OBJECT";
}
diff --git a/libs/ui/tests/InputEvent_test.cpp b/libs/ui/tests/InputEvent_test.cpp
index e21c464..ac5549c 100644
--- a/libs/ui/tests/InputEvent_test.cpp
+++ b/libs/ui/tests/InputEvent_test.cpp
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#include <ui/Input.h>
+#include <androidfw/Input.h>
#include <gtest/gtest.h>
#include <binder/Parcel.h>
diff --git a/libs/ui/tests/InputPublisherAndConsumer_test.cpp b/libs/ui/tests/InputPublisherAndConsumer_test.cpp
index fcc4cad..bb45247 100644
--- a/libs/ui/tests/InputPublisherAndConsumer_test.cpp
+++ b/libs/ui/tests/InputPublisherAndConsumer_test.cpp
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#include <ui/InputTransport.h>
+#include <androidfw/InputTransport.h>
#include <utils/Timers.h>
#include <utils/StopWatch.h>
#include <gtest/gtest.h>
@@ -57,11 +57,8 @@
clientChannel.clear();
}
- void Initialize();
void PublishAndConsumeKeyEvent();
- void PublishAndConsumeMotionEvent(
- size_t samplesToAppendBeforeDispatch = 0,
- size_t samplesToAppendAfterDispatch = 0);
+ void PublishAndConsumeMotionEvent();
};
TEST_F(InputPublisherAndConsumerTest, GetChannel_ReturnsTheChannel) {
@@ -69,21 +66,10 @@
EXPECT_EQ(clientChannel.get(), mConsumer->getChannel().get());
}
-void InputPublisherAndConsumerTest::Initialize() {
- status_t status;
-
- status = mPublisher->initialize();
- ASSERT_EQ(OK, status)
- << "publisher initialize should return OK";
-
- status = mConsumer->initialize();
- ASSERT_EQ(OK, status)
- << "consumer initialize should return OK";
-}
-
void InputPublisherAndConsumerTest::PublishAndConsumeKeyEvent() {
status_t status;
+ const uint32_t seq = 15;
const int32_t deviceId = 1;
const int32_t source = AINPUT_SOURCE_KEYBOARD;
const int32_t action = AKEY_EVENT_ACTION_DOWN;
@@ -95,21 +81,14 @@
const nsecs_t downTime = 3;
const nsecs_t eventTime = 4;
- status = mPublisher->publishKeyEvent(deviceId, source, action, flags,
+ status = mPublisher->publishKeyEvent(seq, deviceId, source, action, flags,
keyCode, scanCode, metaState, repeatCount, downTime, eventTime);
ASSERT_EQ(OK, status)
<< "publisher publishKeyEvent should return OK";
- status = mPublisher->sendDispatchSignal();
- ASSERT_EQ(OK, status)
- << "publisher sendDispatchSignal should return OK";
-
- status = mConsumer->receiveDispatchSignal();
- ASSERT_EQ(OK, status)
- << "consumer receiveDispatchSignal should return OK";
-
+ uint32_t consumeSeq;
InputEvent* event;
- status = mConsumer->consume(& mEventFactory, & event);
+ status = mConsumer->consume(&mEventFactory, true /*consumeBatches*/, &consumeSeq, &event);
ASSERT_EQ(OK, status)
<< "consumer consume should return OK";
@@ -119,6 +98,7 @@
<< "consumer should have returned a key event";
KeyEvent* keyEvent = static_cast<KeyEvent*>(event);
+ EXPECT_EQ(seq, consumeSeq);
EXPECT_EQ(deviceId, keyEvent->getDeviceId());
EXPECT_EQ(source, keyEvent->getSource());
EXPECT_EQ(action, keyEvent->getAction());
@@ -130,26 +110,25 @@
EXPECT_EQ(downTime, keyEvent->getDownTime());
EXPECT_EQ(eventTime, keyEvent->getEventTime());
- status = mConsumer->sendFinishedSignal(true);
+ status = mConsumer->sendFinishedSignal(seq, true);
ASSERT_EQ(OK, status)
<< "consumer sendFinishedSignal should return OK";
+ uint32_t finishedSeq = 0;
bool handled = false;
- status = mPublisher->receiveFinishedSignal(&handled);
+ status = mPublisher->receiveFinishedSignal(&finishedSeq, &handled);
ASSERT_EQ(OK, status)
<< "publisher receiveFinishedSignal should return OK";
+ ASSERT_EQ(seq, finishedSeq)
+ << "publisher receiveFinishedSignal should have returned the original sequence number";
ASSERT_TRUE(handled)
<< "publisher receiveFinishedSignal should have set handled to consumer's reply";
-
- status = mPublisher->reset();
- ASSERT_EQ(OK, status)
- << "publisher reset should return OK";
}
-void InputPublisherAndConsumerTest::PublishAndConsumeMotionEvent(
- size_t samplesToAppendBeforeDispatch, size_t samplesToAppendAfterDispatch) {
+void InputPublisherAndConsumerTest::PublishAndConsumeMotionEvent() {
status_t status;
+ const uint32_t seq = 15;
const int32_t deviceId = 1;
const int32_t source = AINPUT_SOURCE_TOUCHSCREEN;
const int32_t action = AMOTION_EVENT_ACTION_MOVE;
@@ -163,67 +142,36 @@
const float yPrecision = 0.5;
const nsecs_t downTime = 3;
const size_t pointerCount = 3;
+ const nsecs_t eventTime = 4;
PointerProperties pointerProperties[pointerCount];
+ PointerCoords pointerCoords[pointerCount];
for (size_t i = 0; i < pointerCount; i++) {
pointerProperties[i].clear();
pointerProperties[i].id = (i + 2) % pointerCount;
pointerProperties[i].toolType = AMOTION_EVENT_TOOL_TYPE_FINGER;
+
+ pointerCoords[i].clear();
+ pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_X, 100 * i);
+ pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_Y, 200 * i);
+ pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 0.5 * i);
+ pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_SIZE, 0.7 * i);
+ pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR, 1.5 * i);
+ pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR, 1.7 * i);
+ pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, 2.5 * i);
+ pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, 2.7 * i);
+ pointerCoords[i].setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, 3.5 * i);
}
- Vector<nsecs_t> sampleEventTimes;
- Vector<PointerCoords> samplePointerCoords;
-
- for (size_t i = 0; i <= samplesToAppendAfterDispatch + samplesToAppendBeforeDispatch; i++) {
- sampleEventTimes.push(i + 10);
- for (size_t j = 0; j < pointerCount; j++) {
- samplePointerCoords.push();
- PointerCoords& pc = samplePointerCoords.editTop();
- pc.clear();
- pc.setAxisValue(AMOTION_EVENT_AXIS_X, 100 * i + j);
- pc.setAxisValue(AMOTION_EVENT_AXIS_Y, 200 * i + j);
- pc.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 0.5 * i + j);
- pc.setAxisValue(AMOTION_EVENT_AXIS_SIZE, 0.7 * i + j);
- pc.setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR, 1.5 * i + j);
- pc.setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR, 1.7 * i + j);
- pc.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, 2.5 * i + j);
- pc.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, 2.7 * i + j);
- pc.setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, 3.5 * i + j);
- }
- }
-
- status = mPublisher->publishMotionEvent(deviceId, source, action, flags, edgeFlags,
+ status = mPublisher->publishMotionEvent(seq, deviceId, source, action, flags, edgeFlags,
metaState, buttonState, xOffset, yOffset, xPrecision, yPrecision,
- downTime, sampleEventTimes[0], pointerCount,
- pointerProperties, samplePointerCoords.array());
+ downTime, eventTime, pointerCount,
+ pointerProperties, pointerCoords);
ASSERT_EQ(OK, status)
<< "publisher publishMotionEvent should return OK";
- for (size_t i = 0; i < samplesToAppendBeforeDispatch; i++) {
- size_t sampleIndex = i + 1;
- status = mPublisher->appendMotionSample(sampleEventTimes[sampleIndex],
- samplePointerCoords.array() + sampleIndex * pointerCount);
- ASSERT_EQ(OK, status)
- << "publisher appendMotionEvent should return OK";
- }
-
- status = mPublisher->sendDispatchSignal();
- ASSERT_EQ(OK, status)
- << "publisher sendDispatchSignal should return OK";
-
- for (size_t i = 0; i < samplesToAppendAfterDispatch; i++) {
- size_t sampleIndex = i + 1 + samplesToAppendBeforeDispatch;
- status = mPublisher->appendMotionSample(sampleEventTimes[sampleIndex],
- samplePointerCoords.array() + sampleIndex * pointerCount);
- ASSERT_EQ(OK, status)
- << "publisher appendMotionEvent should return OK";
- }
-
- status = mConsumer->receiveDispatchSignal();
- ASSERT_EQ(OK, status)
- << "consumer receiveDispatchSignal should return OK";
-
+ uint32_t consumeSeq;
InputEvent* event;
- status = mConsumer->consume(& mEventFactory, & event);
+ status = mConsumer->consume(&mEventFactory, true /*consumeBatches*/, &consumeSeq, &event);
ASSERT_EQ(OK, status)
<< "consumer consume should return OK";
@@ -232,9 +180,8 @@
ASSERT_EQ(AINPUT_EVENT_TYPE_MOTION, event->getType())
<< "consumer should have returned a motion event";
- size_t lastSampleIndex = samplesToAppendBeforeDispatch + samplesToAppendAfterDispatch;
-
MotionEvent* motionEvent = static_cast<MotionEvent*>(event);
+ EXPECT_EQ(seq, consumeSeq);
EXPECT_EQ(deviceId, motionEvent->getDeviceId());
EXPECT_EQ(source, motionEvent->getSource());
EXPECT_EQ(action, motionEvent->getAction());
@@ -245,150 +192,69 @@
EXPECT_EQ(xPrecision, motionEvent->getXPrecision());
EXPECT_EQ(yPrecision, motionEvent->getYPrecision());
EXPECT_EQ(downTime, motionEvent->getDownTime());
- EXPECT_EQ(sampleEventTimes[lastSampleIndex], motionEvent->getEventTime());
+ EXPECT_EQ(eventTime, motionEvent->getEventTime());
EXPECT_EQ(pointerCount, motionEvent->getPointerCount());
- EXPECT_EQ(lastSampleIndex, motionEvent->getHistorySize());
+ EXPECT_EQ(0U, motionEvent->getHistorySize());
for (size_t i = 0; i < pointerCount; i++) {
SCOPED_TRACE(i);
EXPECT_EQ(pointerProperties[i].id, motionEvent->getPointerId(i));
EXPECT_EQ(pointerProperties[i].toolType, motionEvent->getToolType(i));
- }
- for (size_t sampleIndex = 0; sampleIndex < lastSampleIndex; sampleIndex++) {
- SCOPED_TRACE(sampleIndex);
- EXPECT_EQ(sampleEventTimes[sampleIndex],
- motionEvent->getHistoricalEventTime(sampleIndex));
- for (size_t i = 0; i < pointerCount; i++) {
- SCOPED_TRACE(i);
- size_t offset = sampleIndex * pointerCount + i;
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_X),
- motionEvent->getHistoricalRawX(i, sampleIndex));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_Y),
- motionEvent->getHistoricalRawY(i, sampleIndex));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_X) + xOffset,
- motionEvent->getHistoricalX(i, sampleIndex));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_Y) + yOffset,
- motionEvent->getHistoricalY(i, sampleIndex));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_PRESSURE),
- motionEvent->getHistoricalPressure(i, sampleIndex));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_SIZE),
- motionEvent->getHistoricalSize(i, sampleIndex));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR),
- motionEvent->getHistoricalTouchMajor(i, sampleIndex));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR),
- motionEvent->getHistoricalTouchMinor(i, sampleIndex));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR),
- motionEvent->getHistoricalToolMajor(i, sampleIndex));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR),
- motionEvent->getHistoricalToolMinor(i, sampleIndex));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION),
- motionEvent->getHistoricalOrientation(i, sampleIndex));
- }
- }
-
- SCOPED_TRACE(lastSampleIndex);
- EXPECT_EQ(sampleEventTimes[lastSampleIndex], motionEvent->getEventTime());
- for (size_t i = 0; i < pointerCount; i++) {
- SCOPED_TRACE(i);
- size_t offset = lastSampleIndex * pointerCount + i;
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_X),
+ EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_X),
motionEvent->getRawX(i));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_Y),
+ EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_Y),
motionEvent->getRawY(i));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_X) + xOffset,
+ EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_X) + xOffset,
motionEvent->getX(i));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_Y) + yOffset,
+ EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_Y) + yOffset,
motionEvent->getY(i));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_PRESSURE),
+ EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_PRESSURE),
motionEvent->getPressure(i));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_SIZE),
+ EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_SIZE),
motionEvent->getSize(i));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR),
+ EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR),
motionEvent->getTouchMajor(i));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR),
+ EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR),
motionEvent->getTouchMinor(i));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR),
+ EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR),
motionEvent->getToolMajor(i));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR),
+ EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR),
motionEvent->getToolMinor(i));
- EXPECT_EQ(samplePointerCoords[offset].getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION),
+ EXPECT_EQ(pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION),
motionEvent->getOrientation(i));
}
- status = mConsumer->sendFinishedSignal(false);
+ status = mConsumer->sendFinishedSignal(seq, false);
ASSERT_EQ(OK, status)
<< "consumer sendFinishedSignal should return OK";
+ uint32_t finishedSeq = 0;
bool handled = true;
- status = mPublisher->receiveFinishedSignal(&handled);
+ status = mPublisher->receiveFinishedSignal(&finishedSeq, &handled);
ASSERT_EQ(OK, status)
<< "publisher receiveFinishedSignal should return OK";
+ ASSERT_EQ(seq, finishedSeq)
+ << "publisher receiveFinishedSignal should have returned the original sequence number";
ASSERT_FALSE(handled)
<< "publisher receiveFinishedSignal should have set handled to consumer's reply";
-
- status = mPublisher->reset();
- ASSERT_EQ(OK, status)
- << "publisher reset should return OK";
}
TEST_F(InputPublisherAndConsumerTest, PublishKeyEvent_EndToEnd) {
- ASSERT_NO_FATAL_FAILURE(Initialize());
ASSERT_NO_FATAL_FAILURE(PublishAndConsumeKeyEvent());
}
-TEST_F(InputPublisherAndConsumerTest, PublishKeyEvent_WhenNotReset_ReturnsError) {
- status_t status;
- ASSERT_NO_FATAL_FAILURE(Initialize());
-
- status = mPublisher->publishKeyEvent(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- ASSERT_EQ(OK, status)
- << "publisher publishKeyEvent should return OK first time";
-
- status = mPublisher->publishKeyEvent(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- ASSERT_EQ(INVALID_OPERATION, status)
- << "publisher publishKeyEvent should return INVALID_OPERATION because "
- "the publisher was not reset";
-}
-
TEST_F(InputPublisherAndConsumerTest, PublishMotionEvent_EndToEnd) {
- ASSERT_NO_FATAL_FAILURE(Initialize());
ASSERT_NO_FATAL_FAILURE(PublishAndConsumeMotionEvent());
}
-TEST_F(InputPublisherAndConsumerTest, PublishMotionEvent_WhenNotReset_ReturnsError) {
- status_t status;
- ASSERT_NO_FATAL_FAILURE(Initialize());
-
- const size_t pointerCount = 1;
- PointerProperties pointerProperties[pointerCount];
- PointerCoords pointerCoords[pointerCount];
- for (size_t i = 0; i < pointerCount; i++) {
- pointerProperties[i].clear();
- pointerCoords[i].clear();
- }
-
- status = mPublisher->publishMotionEvent(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- pointerCount, pointerProperties, pointerCoords);
- ASSERT_EQ(OK, status)
- << "publisher publishMotionEvent should return OK";
-
- status = mPublisher->publishMotionEvent(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- pointerCount, pointerProperties, pointerCoords);
- ASSERT_EQ(INVALID_OPERATION, status)
- << "publisher publishMotionEvent should return INVALID_OPERATION because ";
- "the publisher was not reset";
-}
-
TEST_F(InputPublisherAndConsumerTest, PublishMotionEvent_WhenPointerCountLessThan1_ReturnsError) {
status_t status;
- ASSERT_NO_FATAL_FAILURE(Initialize());
-
const size_t pointerCount = 0;
PointerProperties pointerProperties[pointerCount];
PointerCoords pointerCoords[pointerCount];
- status = mPublisher->publishMotionEvent(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ status = mPublisher->publishMotionEvent(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
pointerCount, pointerProperties, pointerCoords);
ASSERT_EQ(BAD_VALUE, status)
<< "publisher publishMotionEvent should return BAD_VALUE";
@@ -396,8 +262,6 @@
TEST_F(InputPublisherAndConsumerTest, PublishMotionEvent_WhenPointerCountGreaterThanMax_ReturnsError) {
status_t status;
- ASSERT_NO_FATAL_FAILURE(Initialize());
-
const size_t pointerCount = MAX_POINTERS + 1;
PointerProperties pointerProperties[pointerCount];
PointerCoords pointerCoords[pointerCount];
@@ -406,14 +270,13 @@
pointerCoords[i].clear();
}
- status = mPublisher->publishMotionEvent(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ status = mPublisher->publishMotionEvent(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
pointerCount, pointerProperties, pointerCoords);
ASSERT_EQ(BAD_VALUE, status)
<< "publisher publishMotionEvent should return BAD_VALUE";
}
TEST_F(InputPublisherAndConsumerTest, PublishMultipleEvents_EndToEnd) {
- ASSERT_NO_FATAL_FAILURE(Initialize());
ASSERT_NO_FATAL_FAILURE(PublishAndConsumeMotionEvent());
ASSERT_NO_FATAL_FAILURE(PublishAndConsumeKeyEvent());
ASSERT_NO_FATAL_FAILURE(PublishAndConsumeMotionEvent());
@@ -421,111 +284,4 @@
ASSERT_NO_FATAL_FAILURE(PublishAndConsumeKeyEvent());
}
-TEST_F(InputPublisherAndConsumerTest, AppendMotionSample_WhenCalledBeforeDispatchSignal_AppendsSamples) {
- status_t status;
- ASSERT_NO_FATAL_FAILURE(Initialize());
- ASSERT_NO_FATAL_FAILURE(PublishAndConsumeMotionEvent(3, 0));
-}
-
-TEST_F(InputPublisherAndConsumerTest, AppendMotionSample_WhenCalledAfterDispatchSignalAndNotConsumed_AppendsSamples) {
- status_t status;
- ASSERT_NO_FATAL_FAILURE(Initialize());
- ASSERT_NO_FATAL_FAILURE(PublishAndConsumeMotionEvent(0, 4));
-}
-
-TEST_F(InputPublisherAndConsumerTest, AppendMotionSample_WhenNoMotionEventPublished_ReturnsError) {
- status_t status;
- ASSERT_NO_FATAL_FAILURE(Initialize());
-
- PointerCoords pointerCoords[1];
- status = mPublisher->appendMotionSample(0, pointerCoords);
- ASSERT_EQ(INVALID_OPERATION, status)
- << "publisher appendMotionSample should return INVALID_OPERATION";
-}
-
-TEST_F(InputPublisherAndConsumerTest, AppendMotionSample_WhenPublishedMotionEventIsNotAMove_ReturnsError) {
- status_t status;
- ASSERT_NO_FATAL_FAILURE(Initialize());
-
- const size_t pointerCount = MAX_POINTERS;
- PointerProperties pointerProperties[pointerCount];
- PointerCoords pointerCoords[pointerCount];
- for (size_t i = 0; i < pointerCount; i++) {
- pointerProperties[i].clear();
- pointerCoords[i].clear();
- }
-
- status = mPublisher->publishMotionEvent(0, 0, AMOTION_EVENT_ACTION_DOWN,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pointerCount, pointerProperties, pointerCoords);
- ASSERT_EQ(OK, status);
-
- status = mPublisher->appendMotionSample(0, pointerCoords);
- ASSERT_EQ(INVALID_OPERATION, status)
- << "publisher appendMotionSample should return INVALID_OPERATION";
-}
-
-TEST_F(InputPublisherAndConsumerTest, AppendMotionSample_WhenAlreadyConsumed_ReturnsError) {
- status_t status;
- ASSERT_NO_FATAL_FAILURE(Initialize());
-
- const size_t pointerCount = MAX_POINTERS;
- PointerProperties pointerProperties[pointerCount];
- PointerCoords pointerCoords[pointerCount];
- for (size_t i = 0; i < pointerCount; i++) {
- pointerProperties[i].clear();
- pointerCoords[i].clear();
- }
-
- status = mPublisher->publishMotionEvent(0, 0, AMOTION_EVENT_ACTION_MOVE,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pointerCount, pointerProperties, pointerCoords);
- ASSERT_EQ(OK, status);
-
- status = mPublisher->sendDispatchSignal();
- ASSERT_EQ(OK, status);
-
- status = mConsumer->receiveDispatchSignal();
- ASSERT_EQ(OK, status);
-
- InputEvent* event;
- status = mConsumer->consume(& mEventFactory, & event);
- ASSERT_EQ(OK, status);
-
- status = mPublisher->appendMotionSample(0, pointerCoords);
- ASSERT_EQ(status_t(FAILED_TRANSACTION), status)
- << "publisher appendMotionSample should return FAILED_TRANSACTION";
-}
-
-TEST_F(InputPublisherAndConsumerTest, AppendMotionSample_WhenBufferFull_ReturnsError) {
- status_t status;
- ASSERT_NO_FATAL_FAILURE(Initialize());
-
- const size_t pointerCount = MAX_POINTERS;
- PointerProperties pointerProperties[pointerCount];
- PointerCoords pointerCoords[pointerCount];
- for (size_t i = 0; i < pointerCount; i++) {
- pointerProperties[i].clear();
- pointerCoords[i].clear();
- }
-
- status = mPublisher->publishMotionEvent(0, 0, AMOTION_EVENT_ACTION_MOVE,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, pointerCount, pointerProperties, pointerCoords);
- ASSERT_EQ(OK, status);
-
- for (int count = 1;; count++) {
- ASSERT_LT(count, 100000) << "should eventually reach OOM";
-
- status = mPublisher->appendMotionSample(0, pointerCoords);
- if (status != OK) {
- ASSERT_GT(count, 12) << "should be able to add at least a dozen samples";
- ASSERT_EQ(NO_MEMORY, status)
- << "publisher appendMotionSample should return NO_MEMORY when buffer is full";
- break;
- }
- }
-
- status = mPublisher->appendMotionSample(0, pointerCoords);
- ASSERT_EQ(NO_MEMORY, status)
- << "publisher appendMotionSample should return NO_MEMORY persistently until reset";
-}
-
} // namespace android
diff --git a/libs/utils/Asset.cpp b/libs/utils/Asset.cpp
index 50e701a..cb7628d 100644
--- a/libs/utils/Asset.cpp
+++ b/libs/utils/Asset.cpp
@@ -21,23 +21,23 @@
#define LOG_TAG "asset"
//#define NDEBUG 0
-#include <utils/Asset.h>
+#include <androidfw/Asset.h>
+#include <androidfw/StreamingZipInflater.h>
+#include <androidfw/ZipFileRO.h>
+#include <androidfw/ZipUtils.h>
#include <utils/Atomic.h>
#include <utils/FileMap.h>
-#include <utils/StreamingZipInflater.h>
-#include <utils/ZipUtils.h>
-#include <utils/ZipFileRO.h>
#include <utils/Log.h>
#include <utils/threads.h>
-#include <string.h>
-#include <memory.h>
-#include <fcntl.h>
-#include <errno.h>
#include <assert.h>
-#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <memory.h>
+#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
+#include <unistd.h>
using namespace android;
diff --git a/libs/utils/AssetDir.cpp b/libs/utils/AssetDir.cpp
index c5f664e..475f521 100644
--- a/libs/utils/AssetDir.cpp
+++ b/libs/utils/AssetDir.cpp
@@ -19,7 +19,7 @@
// implementation is in the header file or in friend functions in
// AssetManager.
//
-#include <utils/AssetDir.h>
+#include <androidfw/AssetDir.h>
using namespace android;
diff --git a/libs/utils/AssetManager.cpp b/libs/utils/AssetManager.cpp
index 47a2b99..4829add 100644
--- a/libs/utils/AssetManager.cpp
+++ b/libs/utils/AssetManager.cpp
@@ -21,23 +21,23 @@
#define LOG_TAG "asset"
//#define LOG_NDEBUG 0
-#include <utils/AssetManager.h>
-#include <utils/AssetDir.h>
-#include <utils/Asset.h>
+#include <androidfw/Asset.h>
+#include <androidfw/AssetDir.h>
+#include <androidfw/AssetManager.h>
+#include <androidfw/ResourceTypes.h>
+#include <androidfw/ZipFileRO.h>
#include <utils/Atomic.h>
-#include <utils/String8.h>
-#include <utils/ResourceTypes.h>
-#include <utils/String8.h>
-#include <utils/ZipFileRO.h>
#include <utils/Log.h>
-#include <utils/Timers.h>
+#include <utils/String8.h>
+#include <utils/String8.h>
#include <utils/threads.h>
+#include <utils/Timers.h>
+#include <assert.h>
#include <dirent.h>
#include <errno.h>
-#include <assert.h>
-#include <strings.h>
#include <fcntl.h>
+#include <strings.h>
#include <sys/stat.h>
#include <unistd.h>
diff --git a/libs/utils/BackupData.cpp b/libs/utils/BackupData.cpp
index f956306..7b1bcba 100644
--- a/libs/utils/BackupData.cpp
+++ b/libs/utils/BackupData.cpp
@@ -16,7 +16,7 @@
#define LOG_TAG "backup_data"
-#include <utils/BackupHelpers.h>
+#include <androidfw/BackupHelpers.h>
#include <utils/ByteOrder.h>
#include <stdio.h>
diff --git a/libs/utils/BackupHelpers.cpp b/libs/utils/BackupHelpers.cpp
index f77a891..7a817a7 100644
--- a/libs/utils/BackupHelpers.cpp
+++ b/libs/utils/BackupHelpers.cpp
@@ -16,7 +16,7 @@
#define LOG_TAG "file_backup_helper"
-#include <utils/BackupHelpers.h>
+#include <androidfw/BackupHelpers.h>
#include <utils/KeyedVector.h>
#include <utils/ByteOrder.h>
@@ -546,7 +546,7 @@
// read/write up to this much at a time.
const size_t BUFSIZE = 32 * 1024;
- char* buf = new char[BUFSIZE];
+ char* buf = (char *)calloc(1,BUFSIZE);
char* paxHeader = buf + 512; // use a different chunk of it as separate scratch
char* paxData = buf + 1024;
@@ -556,9 +556,6 @@
goto cleanup;
}
- // Good to go -- first construct the standard tar header at the start of the buffer
- memset(buf, 0, BUFSIZE);
-
// Magic fields for the ustar file format
strcat(buf + 257, "ustar");
strcat(buf + 263, "00");
diff --git a/libs/utils/ObbFile.cpp b/libs/utils/ObbFile.cpp
index ddf5991..21e06c8 100644
--- a/libs/utils/ObbFile.cpp
+++ b/libs/utils/ObbFile.cpp
@@ -23,9 +23,9 @@
#define LOG_TAG "ObbFile"
+#include <androidfw/ObbFile.h>
#include <utils/Compat.h>
#include <utils/Log.h>
-#include <utils/ObbFile.h>
//#define DEBUG 1
diff --git a/libs/utils/ResourceTypes.cpp b/libs/utils/ResourceTypes.cpp
index 3fa562e..07f3b16 100644
--- a/libs/utils/ResourceTypes.cpp
+++ b/libs/utils/ResourceTypes.cpp
@@ -17,14 +17,14 @@
#define LOG_TAG "ResourceType"
//#define LOG_NDEBUG 0
+#include <androidfw/ResourceTypes.h>
#include <utils/Atomic.h>
#include <utils/ByteOrder.h>
#include <utils/Debug.h>
-#include <utils/ResourceTypes.h>
+#include <utils/Log.h>
#include <utils/String16.h>
#include <utils/String8.h>
#include <utils/TextOutput.h>
-#include <utils/Log.h>
#include <stdlib.h>
#include <string.h>
@@ -379,8 +379,7 @@
size_t charSize;
if (mHeader->flags&ResStringPool_header::UTF8_FLAG) {
charSize = sizeof(uint8_t);
- mCache = (char16_t**)malloc(sizeof(char16_t**)*mHeader->stringCount);
- memset(mCache, 0, sizeof(char16_t**)*mHeader->stringCount);
+ mCache = (char16_t**)calloc(mHeader->stringCount, sizeof(char16_t**));
} else {
charSize = sizeof(char16_t);
}
@@ -3252,16 +3251,14 @@
// Bag not found, we need to compute it!
if (!grp->bags) {
- grp->bags = (bag_set***)malloc(sizeof(bag_set*)*grp->typeCount);
+ grp->bags = (bag_set***)calloc(grp->typeCount, sizeof(bag_set*));
if (!grp->bags) return NO_MEMORY;
- memset(grp->bags, 0, sizeof(bag_set*)*grp->typeCount);
}
bag_set** typeSet = grp->bags[t];
if (!typeSet) {
- typeSet = (bag_set**)malloc(sizeof(bag_set*)*NENTRY);
+ typeSet = (bag_set**)calloc(NENTRY, sizeof(bag_set*));
if (!typeSet) return NO_MEMORY;
- memset(typeSet, 0, sizeof(bag_set*)*NENTRY);
grp->bags[t] = typeSet;
}
diff --git a/libs/utils/StreamingZipInflater.cpp b/libs/utils/StreamingZipInflater.cpp
index 8512170..d3fb98d 100644
--- a/libs/utils/StreamingZipInflater.cpp
+++ b/libs/utils/StreamingZipInflater.cpp
@@ -18,8 +18,8 @@
#define LOG_TAG "szipinf"
#include <utils/Log.h>
+#include <androidfw/StreamingZipInflater.h>
#include <utils/FileMap.h>
-#include <utils/StreamingZipInflater.h>
#include <string.h>
#include <stddef.h>
#include <assert.h>
diff --git a/libs/utils/ZipFileCRO.cpp b/libs/utils/ZipFileCRO.cpp
index 55dfd9f..c8df845 100644
--- a/libs/utils/ZipFileCRO.cpp
+++ b/libs/utils/ZipFileCRO.cpp
@@ -14,8 +14,8 @@
* limitations under the License.
*/
-#include <utils/ZipFileCRO.h>
-#include <utils/ZipFileRO.h>
+#include <androidfw/ZipFileCRO.h>
+#include <androidfw/ZipFileRO.h>
using namespace android;
diff --git a/libs/utils/ZipFileRO.cpp b/libs/utils/ZipFileRO.cpp
index 1498aac..4b7f1e7 100644
--- a/libs/utils/ZipFileRO.cpp
+++ b/libs/utils/ZipFileRO.cpp
@@ -19,7 +19,7 @@
//
#define LOG_TAG "zipro"
//#define LOG_NDEBUG 0
-#include <utils/ZipFileRO.h>
+#include <androidfw/ZipFileRO.h>
#include <utils/Log.h>
#include <utils/misc.h>
#include <utils/threads.h>
diff --git a/libs/utils/ZipUtils.cpp b/libs/utils/ZipUtils.cpp
index 2dbdc1d..db3479d 100644
--- a/libs/utils/ZipUtils.cpp
+++ b/libs/utils/ZipUtils.cpp
@@ -20,8 +20,8 @@
#define LOG_TAG "ziputil"
-#include <utils/ZipUtils.h>
-#include <utils/ZipFileRO.h>
+#include <androidfw/ZipUtils.h>
+#include <androidfw/ZipFileRO.h>
#include <utils/Log.h>
#include <stdlib.h>
diff --git a/libs/utils/tests/ObbFile_test.cpp b/libs/utils/tests/ObbFile_test.cpp
index 46b30c2..09d4d7d 100644
--- a/libs/utils/tests/ObbFile_test.cpp
+++ b/libs/utils/tests/ObbFile_test.cpp
@@ -15,8 +15,8 @@
*/
#define LOG_TAG "ObbFile_test"
+#include <androidfw/ObbFile.h>
#include <utils/Log.h>
-#include <utils/ObbFile.h>
#include <utils/RefBase.h>
#include <utils/String8.h>
diff --git a/libs/utils/tests/ZipFileRO_test.cpp b/libs/utils/tests/ZipFileRO_test.cpp
index 7a1d0bd..344f974 100644
--- a/libs/utils/tests/ZipFileRO_test.cpp
+++ b/libs/utils/tests/ZipFileRO_test.cpp
@@ -15,8 +15,8 @@
*/
#define LOG_TAG "ZipFileRO_test"
+#include <androidfw/ZipFileRO.h>
#include <utils/Log.h>
-#include <utils/ZipFileRO.h>
#include <gtest/gtest.h>
diff --git a/opengl/libs/EGL/Loader.cpp b/opengl/libs/EGL/Loader.cpp
index 06be2ef..0b1016c 100644
--- a/opengl/libs/EGL/Loader.cpp
+++ b/opengl/libs/EGL/Loader.cpp
@@ -118,12 +118,6 @@
// ----------------------------------------------------------------------------
-Loader::entry_t::entry_t(int dpy, int impl, const char* tag)
- : dpy(dpy), impl(impl), tag(tag) {
-}
-
-// ----------------------------------------------------------------------------
-
Loader::Loader()
{
char line[256];
@@ -131,8 +125,9 @@
/* Special case for GLES emulation */
if (checkGlesEmulationStatus() == 0) {
- ALOGD("Emulator without GPU support detected. Fallback to software renderer.");
- gConfig.add( entry_t(0, 0, "android") );
+ ALOGD("Emulator without GPU support detected. "
+ "Fallback to software renderer.");
+ mDriverTag.setTo("android");
return;
}
@@ -141,14 +136,16 @@
if (cfg == NULL) {
// default config
ALOGD("egl.cfg not found, using default config");
- gConfig.add( entry_t(0, 0, "android") );
+ mDriverTag.setTo("android");
} else {
while (fgets(line, 256, cfg)) {
- int dpy;
- int impl;
+ int dpy, impl;
if (sscanf(line, "%u %u %s", &dpy, &impl, tag) == 3) {
//ALOGD(">>> %u %u %s", dpy, impl, tag);
- gConfig.add( entry_t(dpy, impl, tag) );
+ // We only load the h/w accelerated implementation
+ if (tag != String8("android")) {
+ mDriverTag = tag;
+ }
}
}
fclose(cfg);
@@ -160,30 +157,12 @@
GLTrace_stop();
}
-const char* Loader::getTag(int dpy, int impl)
+void* Loader::open(egl_connection_t* cnx)
{
- const Vector<entry_t>& cfgs(gConfig);
- const size_t c = cfgs.size();
- for (size_t i=0 ; i<c ; i++) {
- if (dpy == cfgs[i].dpy)
- if (impl == cfgs[i].impl)
- return cfgs[i].tag.string();
- }
- return 0;
-}
-
-void* Loader::open(EGLNativeDisplayType display, int impl, egl_connection_t* cnx)
-{
- /*
- * TODO: if we don't find display/0, then use 0/0
- * (0/0 should always work)
- */
-
void* dso;
- int index = int(display);
driver_t* hnd = 0;
- char const* tag = getTag(index, impl);
+ char const* tag = mDriverTag.string();
if (tag) {
dso = load_driver("GLES", tag, cnx, EGL | GLESv1_CM | GLESv2);
if (dso) {
@@ -193,16 +172,14 @@
dso = load_driver("EGL", tag, cnx, EGL);
if (dso) {
hnd = new driver_t(dso);
-
// TODO: make this more automated
hnd->set( load_driver("GLESv1_CM", tag, cnx, GLESv1_CM), GLESv1_CM );
-
- hnd->set( load_driver("GLESv2", tag, cnx, GLESv2), GLESv2 );
+ hnd->set( load_driver("GLESv2", tag, cnx, GLESv2), GLESv2 );
}
}
}
- LOG_FATAL_IF(!index && !impl && !hnd,
+ LOG_FATAL_IF(!index && !hnd,
"couldn't find the default OpenGL ES implementation "
"for default display");
@@ -221,7 +198,7 @@
__eglMustCastToProperFunctionPointerType* curr,
getProcAddressType getProcAddress)
{
- const size_t SIZE = 256;
+ const ssize_t SIZE = 256;
char scrap[SIZE];
while (*api) {
char const * name = *api;
@@ -326,14 +303,14 @@
if (mask & GLESv1_CM) {
init_api(dso, gl_names,
(__eglMustCastToProperFunctionPointerType*)
- &cnx->hooks[GLESv1_INDEX]->gl,
+ &cnx->hooks[egl_connection_t::GLESv1_INDEX]->gl,
getProcAddress);
}
if (mask & GLESv2) {
init_api(dso, gl_names,
(__eglMustCastToProperFunctionPointerType*)
- &cnx->hooks[GLESv2_INDEX]->gl,
+ &cnx->hooks[egl_connection_t::GLESv2_INDEX]->gl,
getProcAddress);
}
diff --git a/opengl/libs/EGL/Loader.h b/opengl/libs/EGL/Loader.h
index 580d6e4..30773cb 100644
--- a/opengl/libs/EGL/Loader.h
+++ b/opengl/libs/EGL/Loader.h
@@ -24,7 +24,6 @@
#include <utils/Errors.h>
#include <utils/Singleton.h>
#include <utils/String8.h>
-#include <utils/Vector.h>
#include <EGL/egl.h>
@@ -53,23 +52,13 @@
void* dso[3];
};
- struct entry_t {
- entry_t() { }
- entry_t(int dpy, int impl, const char* tag);
- int dpy;
- int impl;
- String8 tag;
- };
-
- Vector<entry_t> gConfig;
+ String8 mDriverTag;
getProcAddressType getProcAddress;
- const char* getTag(int dpy, int impl);
-
public:
~Loader();
- void* open(EGLNativeDisplayType display, int impl, egl_connection_t* cnx);
+ void* open(egl_connection_t* cnx);
status_t close(void* driver);
private:
diff --git a/opengl/libs/EGL/egl.cpp b/opengl/libs/EGL/egl.cpp
index 83933e5..eec5ce1 100644
--- a/opengl/libs/EGL/egl.cpp
+++ b/opengl/libs/EGL/egl.cpp
@@ -48,8 +48,8 @@
namespace android {
// ----------------------------------------------------------------------------
-egl_connection_t gEGLImpl[IMPL_NUM_IMPLEMENTATIONS];
-gl_hooks_t gHooks[2][IMPL_NUM_IMPLEMENTATIONS];
+egl_connection_t gEGLImpl;
+gl_hooks_t gHooks[2];
gl_hooks_t gHooksNoContext;
pthread_key_t gGLWrapperKey = -1;
@@ -187,16 +187,13 @@
return dp;
}
-egl_connection_t* validate_display_config(EGLDisplay dpy, EGLConfig config,
+egl_connection_t* validate_display_config(EGLDisplay dpy, EGLConfig,
egl_display_t const*& dp) {
dp = validate_display(dpy);
if (!dp)
return (egl_connection_t*) NULL;
- if (intptr_t(config) >= dp->numTotalConfigs) {
- return setError(EGL_BAD_CONFIG, (egl_connection_t*)NULL);
- }
- egl_connection_t* const cnx = &gEGLImpl[dp->configs[intptr_t(config)].impl];
+ egl_connection_t* const cnx = &gEGLImpl;
if (cnx->dso == 0) {
return setError(EGL_BAD_CONFIG, (egl_connection_t*)NULL);
}
@@ -205,34 +202,6 @@
// ----------------------------------------------------------------------------
-EGLImageKHR egl_get_image_for_current_context(EGLImageKHR image)
-{
- EGLContext context = egl_tls_t::getContext();
- if (context == EGL_NO_CONTEXT || image == EGL_NO_IMAGE_KHR)
- return EGL_NO_IMAGE_KHR;
-
- egl_context_t const * const c = get_context(context);
- if (c == NULL) // this should never happen, by construction
- return EGL_NO_IMAGE_KHR;
-
- egl_display_t* display = egl_display_t::get(c->dpy);
- if (display == NULL) // this should never happen, by construction
- return EGL_NO_IMAGE_KHR;
-
- ImageRef _i(display, image);
- if (!_i.get())
- return EGL_NO_IMAGE_KHR;
-
- // here we don't validate the context because if it's been marked for
- // termination, this call should still succeed since it's internal to
- // EGL.
-
- egl_image_t const * const i = get_image(image);
- return i->images[c->impl];
-}
-
-// ----------------------------------------------------------------------------
-
const GLubyte * egl_get_string_for_current_context(GLenum name) {
// NOTE: returning NULL here will fall-back to the default
// implementation.
@@ -266,34 +235,17 @@
// get our driver loader
Loader& loader(Loader::getInstance());
- // dynamically load all our EGL implementations
- egl_connection_t* cnx;
-
- cnx = &gEGLImpl[IMPL_SOFTWARE];
+ // dynamically load our EGL implementation
+ egl_connection_t* cnx = &gEGLImpl;
if (cnx->dso == 0) {
- cnx->hooks[GLESv1_INDEX] = &gHooks[GLESv1_INDEX][IMPL_SOFTWARE];
- cnx->hooks[GLESv2_INDEX] = &gHooks[GLESv2_INDEX][IMPL_SOFTWARE];
- cnx->dso = loader.open(EGL_DEFAULT_DISPLAY, 0, cnx);
+ cnx->hooks[egl_connection_t::GLESv1_INDEX] =
+ &gHooks[egl_connection_t::GLESv1_INDEX];
+ cnx->hooks[egl_connection_t::GLESv2_INDEX] =
+ &gHooks[egl_connection_t::GLESv2_INDEX];
+ cnx->dso = loader.open(cnx);
}
- cnx = &gEGLImpl[IMPL_HARDWARE];
- if (cnx->dso == 0) {
- char value[PROPERTY_VALUE_MAX];
- property_get("debug.egl.hw", value, "1");
- if (atoi(value) != 0) {
- cnx->hooks[GLESv1_INDEX] = &gHooks[GLESv1_INDEX][IMPL_HARDWARE];
- cnx->hooks[GLESv2_INDEX] = &gHooks[GLESv2_INDEX][IMPL_HARDWARE];
- cnx->dso = loader.open(EGL_DEFAULT_DISPLAY, 1, cnx);
- } else {
- ALOGD("3D hardware acceleration is disabled");
- }
- }
-
- if (!gEGLImpl[IMPL_SOFTWARE].dso && !gEGLImpl[IMPL_HARDWARE].dso) {
- return EGL_FALSE;
- }
-
- return EGL_TRUE;
+ return cnx->dso ? EGL_TRUE : EGL_FALSE;
}
static pthread_mutex_t sInitDriverMutex = PTHREAD_MUTEX_INITIALIZER;
diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp
index 73aab26..a5dc832 100644
--- a/opengl/libs/EGL/eglApi.cpp
+++ b/opengl/libs/EGL/eglApi.cpp
@@ -44,6 +44,7 @@
#include "egl_impl.h"
#include "egl_object.h"
#include "egl_tls.h"
+#include "egldefs.h"
using namespace android;
@@ -88,24 +89,6 @@
// ----------------------------------------------------------------------------
-template<typename T>
-static __attribute__((noinline))
-int binarySearch(T const sortedArray[], int first, int last, T key) {
- while (first <= last) {
- int mid = (first + last) / 2;
- if (sortedArray[mid] < key) {
- first = mid + 1;
- } else if (key < sortedArray[mid]) {
- last = mid - 1;
- } else {
- return mid;
- }
- }
- return -1;
-}
-
-// ----------------------------------------------------------------------------
-
namespace android {
extern void setGLHooksThreadSpecific(gl_hooks_t const *value);
extern EGLBoolean egl_init_drivers();
@@ -183,21 +166,20 @@
egl_display_t const * const dp = validate_display(dpy);
if (!dp) return EGL_FALSE;
- GLint numConfigs = dp->numTotalConfigs;
- if (!configs) {
- *num_config = numConfigs;
- return EGL_TRUE;
+ if (num_config==0) {
+ return setError(EGL_BAD_PARAMETER, EGL_FALSE);
}
- GLint n = 0;
- for (intptr_t i=0 ; i<dp->numTotalConfigs && config_size ; i++) {
- *configs++ = EGLConfig(i);
- config_size--;
- n++;
+ EGLBoolean res = EGL_FALSE;
+ *num_config = 0;
+
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso) {
+ res = cnx->egl.eglGetConfigs(
+ dp->disp.dpy, configs, config_size, num_config);
}
-
- *num_config = n;
- return EGL_TRUE;
+
+ return res;
}
EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list,
@@ -213,105 +195,13 @@
return setError(EGL_BAD_PARAMETER, EGL_FALSE);
}
- EGLint n;
EGLBoolean res = EGL_FALSE;
*num_config = 0;
-
- // It is unfortunate, but we need to remap the EGL_CONFIG_IDs,
- // to do this, we have to go through the attrib_list array once
- // to figure out both its size and if it contains an EGL_CONFIG_ID
- // key. If so, the full array is copied and patched.
- // NOTE: we assume that there can be only one occurrence
- // of EGL_CONFIG_ID.
-
- EGLint patch_index = -1;
- GLint attr;
- size_t size = 0;
- if (attrib_list) {
- while ((attr=attrib_list[size]) != EGL_NONE) {
- if (attr == EGL_CONFIG_ID)
- patch_index = size;
- size += 2;
- }
- }
- if (patch_index >= 0) {
- size += 2; // we need copy the sentinel as well
- EGLint* new_list = (EGLint*)malloc(size*sizeof(EGLint));
- if (new_list == 0)
- return setError(EGL_BAD_ALLOC, EGL_FALSE);
- memcpy(new_list, attrib_list, size*sizeof(EGLint));
-
- // patch the requested EGL_CONFIG_ID
- bool found = false;
- EGLConfig ourConfig(0);
- EGLint& configId(new_list[patch_index+1]);
- for (intptr_t i=0 ; i<dp->numTotalConfigs ; i++) {
- if (dp->configs[i].configId == configId) {
- ourConfig = EGLConfig(i);
- configId = dp->configs[i].implConfigId;
- found = true;
- break;
- }
- }
-
- egl_connection_t* const cnx = &gEGLImpl[dp->configs[intptr_t(ourConfig)].impl];
- if (found && cnx->dso) {
- // and switch to the new list
- attrib_list = const_cast<const EGLint *>(new_list);
-
- // At this point, the only configuration that can match is
- // dp->configs[i][index], however, we don't know if it would be
- // rejected because of the other attributes, so we do have to call
- // cnx->egl.eglChooseConfig() -- but we don't have to loop
- // through all the EGLimpl[].
- // We also know we can only get a single config back, and we know
- // which one.
-
- res = cnx->egl.eglChooseConfig(
- dp->disp[ dp->configs[intptr_t(ourConfig)].impl ].dpy,
- attrib_list, configs, config_size, &n);
- if (res && n>0) {
- // n has to be 0 or 1, by construction, and we already know
- // which config it will return (since there can be only one).
- if (configs) {
- configs[0] = ourConfig;
- }
- *num_config = 1;
- }
- }
-
- free(const_cast<EGLint *>(attrib_list));
- return res;
- }
-
-
- for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- if (cnx->dso) {
- if (cnx->egl.eglChooseConfig(
- dp->disp[i].dpy, attrib_list, configs, config_size, &n)) {
- if (configs) {
- // now we need to convert these client EGLConfig to our
- // internal EGLConfig format.
- // This is done in O(n Log(n)) time.
- for (int j=0 ; j<n ; j++) {
- egl_config_t key(i, configs[j]);
- intptr_t index = binarySearch<egl_config_t>(
- dp->configs, 0, dp->numTotalConfigs, key);
- if (index >= 0) {
- configs[j] = EGLConfig(index);
- } else {
- return setError(EGL_BAD_CONFIG, EGL_FALSE);
- }
- }
- configs += n;
- config_size -= n;
- }
- *num_config += n;
- res = EGL_TRUE;
- }
- }
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso) {
+ res = cnx->egl.eglChooseConfig(
+ dp->disp.dpy, attrib_list, configs, config_size, num_config);
}
return res;
}
@@ -325,13 +215,8 @@
egl_connection_t* cnx = validate_display_config(dpy, config, dp);
if (!cnx) return EGL_FALSE;
- if (attribute == EGL_CONFIG_ID) {
- *value = dp->configs[intptr_t(config)].configId;
- return EGL_TRUE;
- }
return cnx->egl.eglGetConfigAttrib(
- dp->disp[ dp->configs[intptr_t(config)].impl ].dpy,
- dp->configs[intptr_t(config)].config, attribute, value);
+ dp->disp.dpy, config, attribute, value);
}
// ----------------------------------------------------------------------------
@@ -347,8 +232,7 @@
egl_display_t const* dp = 0;
egl_connection_t* cnx = validate_display_config(dpy, config, dp);
if (cnx) {
- EGLDisplay iDpy = dp->disp[ dp->configs[intptr_t(config)].impl ].dpy;
- EGLConfig iConfig = dp->configs[intptr_t(config)].config;
+ EGLDisplay iDpy = dp->disp.dpy;
EGLint format;
if (native_window_api_connect(window, NATIVE_WINDOW_API_EGL) != OK) {
@@ -359,7 +243,7 @@
// set the native window's buffers format to match this config
if (cnx->egl.eglGetConfigAttrib(iDpy,
- iConfig, EGL_NATIVE_VISUAL_ID, &format)) {
+ config, EGL_NATIVE_VISUAL_ID, &format)) {
if (format != 0) {
int err = native_window_set_buffers_format(window, format);
if (err != 0) {
@@ -377,10 +261,9 @@
anw->setSwapInterval(anw, 1);
EGLSurface surface = cnx->egl.eglCreateWindowSurface(
- iDpy, iConfig, window, attrib_list);
+ iDpy, config, window, attrib_list);
if (surface != EGL_NO_SURFACE) {
- egl_surface_t* s = new egl_surface_t(dpy, config, window, surface,
- dp->configs[intptr_t(config)].impl, cnx);
+ egl_surface_t* s = new egl_surface_t(dpy, config, window, surface, cnx);
return s;
}
@@ -401,11 +284,9 @@
egl_connection_t* cnx = validate_display_config(dpy, config, dp);
if (cnx) {
EGLSurface surface = cnx->egl.eglCreatePixmapSurface(
- dp->disp[ dp->configs[intptr_t(config)].impl ].dpy,
- dp->configs[intptr_t(config)].config, pixmap, attrib_list);
+ dp->disp.dpy, config, pixmap, attrib_list);
if (surface != EGL_NO_SURFACE) {
- egl_surface_t* s = new egl_surface_t(dpy, config, NULL, surface,
- dp->configs[intptr_t(config)].impl, cnx);
+ egl_surface_t* s = new egl_surface_t(dpy, config, NULL, surface, cnx);
return s;
}
}
@@ -421,11 +302,9 @@
egl_connection_t* cnx = validate_display_config(dpy, config, dp);
if (cnx) {
EGLSurface surface = cnx->egl.eglCreatePbufferSurface(
- dp->disp[ dp->configs[intptr_t(config)].impl ].dpy,
- dp->configs[intptr_t(config)].config, attrib_list);
+ dp->disp.dpy, config, attrib_list);
if (surface != EGL_NO_SURFACE) {
- egl_surface_t* s = new egl_surface_t(dpy, config, NULL, surface,
- dp->configs[intptr_t(config)].impl, cnx);
+ egl_surface_t* s = new egl_surface_t(dpy, config, NULL, surface, cnx);
return s;
}
}
@@ -444,8 +323,7 @@
return setError(EGL_BAD_SURFACE, EGL_FALSE);
egl_surface_t * const s = get_surface(surface);
- EGLBoolean result = s->cnx->egl.eglDestroySurface(
- dp->disp[s->impl].dpy, s->surface);
+ EGLBoolean result = s->cnx->egl.eglDestroySurface(dp->disp.dpy, s->surface);
if (result == EGL_TRUE) {
_s.terminate();
}
@@ -465,16 +343,8 @@
return setError(EGL_BAD_SURFACE, EGL_FALSE);
egl_surface_t const * const s = get_surface(surface);
- EGLBoolean result(EGL_TRUE);
- if (attribute == EGL_CONFIG_ID) {
- // We need to remap EGL_CONFIG_IDs
- *value = dp->configs[intptr_t(s->config)].configId;
- } else {
- result = s->cnx->egl.eglQuerySurface(
- dp->disp[s->impl].dpy, s->surface, attribute, value);
- }
-
- return result;
+ return s->cnx->egl.eglQuerySurface(
+ dp->disp.dpy, s->surface, attribute, value);
}
void EGLAPI eglBeginFrame(EGLDisplay dpy, EGLSurface surface) {
@@ -514,9 +384,7 @@
share_list = c->context;
}
EGLContext context = cnx->egl.eglCreateContext(
- dp->disp[ dp->configs[intptr_t(config)].impl ].dpy,
- dp->configs[intptr_t(config)].config,
- share_list, attrib_list);
+ dp->disp.dpy, config, share_list, attrib_list);
if (context != EGL_NO_CONTEXT) {
// figure out if it's a GLESv1 or GLESv2
int version = 0;
@@ -526,15 +394,14 @@
GLint value = *attrib_list++;
if (attr == EGL_CONTEXT_CLIENT_VERSION) {
if (value == 1) {
- version = GLESv1_INDEX;
+ version = egl_connection_t::GLESv1_INDEX;
} else if (value == 2) {
- version = GLESv2_INDEX;
+ version = egl_connection_t::GLESv2_INDEX;
}
}
};
}
- egl_context_t* c = new egl_context_t(dpy, context, config,
- dp->configs[intptr_t(config)].impl, cnx, version);
+ egl_context_t* c = new egl_context_t(dpy, context, config, cnx, version);
#if EGL_TRACE
if (gEGLDebugLevel > 0)
GLTrace_eglCreateContext(version, c);
@@ -558,8 +425,7 @@
return setError(EGL_BAD_CONTEXT, EGL_FALSE);
egl_context_t * const c = get_context(ctx);
- EGLBoolean result = c->cnx->egl.eglDestroyContext(
- dp->disp[c->impl].dpy, c->context);
+ EGLBoolean result = c->cnx->egl.eglDestroyContext(dp->disp.dpy, c->context);
if (result == EGL_TRUE) {
_c.terminate();
}
@@ -625,20 +491,12 @@
// retrieve the underlying implementation's draw EGLSurface
if (draw != EGL_NO_SURFACE) {
d = get_surface(draw);
- // make sure the EGLContext and EGLSurface passed in are for
- // the same driver
- if (c && d->impl != c->impl)
- return setError(EGL_BAD_MATCH, EGL_FALSE);
impl_draw = d->surface;
}
// retrieve the underlying implementation's read EGLSurface
if (read != EGL_NO_SURFACE) {
r = get_surface(read);
- // make sure the EGLContext and EGLSurface passed in are for
- // the same driver
- if (c && r->impl != c->impl)
- return setError(EGL_BAD_MATCH, EGL_FALSE);
impl_read = r->surface;
}
@@ -682,17 +540,9 @@
if (!_c.get()) return setError(EGL_BAD_CONTEXT, EGL_FALSE);
egl_context_t * const c = get_context(ctx);
+ return c->cnx->egl.eglQueryContext(
+ dp->disp.dpy, c->context, attribute, value);
- EGLBoolean result(EGL_TRUE);
- if (attribute == EGL_CONFIG_ID) {
- *value = dp->configs[intptr_t(c->config)].configId;
- } else {
- // We need to remap EGL_CONFIG_IDs
- result = c->cnx->egl.eglQueryContext(
- dp->disp[c->impl].dpy, c->context, attribute, value);
- }
-
- return result;
}
EGLContext eglGetCurrentContext(void)
@@ -744,87 +594,37 @@
EGLBoolean eglWaitGL(void)
{
- // could be called before eglInitialize(), but we wouldn't have a context
- // then, and this function would return GL_TRUE, which isn't wrong.
-
clearError();
- EGLBoolean res = EGL_TRUE;
- EGLContext ctx = getContext();
- if (ctx) {
- egl_context_t const * const c = get_context(ctx);
- if (!c) return setError(EGL_BAD_CONTEXT, EGL_FALSE);
- if (uint32_t(c->impl)>=2)
- return setError(EGL_BAD_CONTEXT, EGL_FALSE);
- egl_connection_t* const cnx = &gEGLImpl[c->impl];
- if (!cnx->dso)
- return setError(EGL_BAD_CONTEXT, EGL_FALSE);
- res = cnx->egl.eglWaitGL();
- }
- return res;
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (!cnx->dso)
+ return setError(EGL_BAD_CONTEXT, EGL_FALSE);
+
+ return cnx->egl.eglWaitGL();
}
EGLBoolean eglWaitNative(EGLint engine)
{
- // could be called before eglInitialize(), but we wouldn't have a context
- // then, and this function would return GL_TRUE, which isn't wrong.
-
clearError();
- EGLBoolean res = EGL_TRUE;
- EGLContext ctx = getContext();
- if (ctx) {
- egl_context_t const * const c = get_context(ctx);
- if (!c) return setError(EGL_BAD_CONTEXT, EGL_FALSE);
- if (uint32_t(c->impl)>=2)
- return setError(EGL_BAD_CONTEXT, EGL_FALSE);
- egl_connection_t* const cnx = &gEGLImpl[c->impl];
- if (!cnx->dso)
- return setError(EGL_BAD_CONTEXT, EGL_FALSE);
- res = cnx->egl.eglWaitNative(engine);
- }
- return res;
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (!cnx->dso)
+ return setError(EGL_BAD_CONTEXT, EGL_FALSE);
+
+ return cnx->egl.eglWaitNative(engine);
}
EGLint eglGetError(void)
{
- EGLint result = EGL_SUCCESS;
- EGLint err;
- for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) {
- err = EGL_SUCCESS;
- egl_connection_t* const cnx = &gEGLImpl[i];
- if (cnx->dso)
- err = cnx->egl.eglGetError();
- if (err!=EGL_SUCCESS && result==EGL_SUCCESS)
- result = err;
+ EGLint err = EGL_SUCCESS;
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso) {
+ err = cnx->egl.eglGetError();
}
- err = egl_tls_t::getError();
- if (result == EGL_SUCCESS)
- result = err;
- return result;
-}
-
-// Note: Similar implementations of these functions also exist in
-// gl2.cpp and gl.cpp, and are used by applications that call the
-// exported entry points directly.
-typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image);
-typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image);
-
-static PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES_impl = NULL;
-static PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC glEGLImageTargetRenderbufferStorageOES_impl = NULL;
-
-static void glEGLImageTargetTexture2DOES_wrapper(GLenum target, GLeglImageOES image)
-{
- GLeglImageOES implImage =
- (GLeglImageOES)egl_get_image_for_current_context((EGLImageKHR)image);
- glEGLImageTargetTexture2DOES_impl(target, implImage);
-}
-
-static void glEGLImageTargetRenderbufferStorageOES_wrapper(GLenum target, GLeglImageOES image)
-{
- GLeglImageOES implImage =
- (GLeglImageOES)egl_get_image_for_current_context((EGLImageKHR)image);
- glEGLImageTargetRenderbufferStorageOES_impl(target, implImage);
+ if (err == EGL_SUCCESS) {
+ err = egl_tls_t::getError();
+ }
+ return err;
}
__eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname)
@@ -885,32 +685,22 @@
if (!addr && (slot < MAX_NUMBER_OF_GL_EXTENSIONS)) {
bool found = false;
- for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- if (cnx->dso && cnx->egl.eglGetProcAddress) {
- found = true;
- // Extensions are independent of the bound context
- cnx->hooks[GLESv1_INDEX]->ext.extensions[slot] =
- cnx->hooks[GLESv2_INDEX]->ext.extensions[slot] =
+
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && cnx->egl.eglGetProcAddress) {
+ found = true;
+ // Extensions are independent of the bound context
+ cnx->hooks[egl_connection_t::GLESv1_INDEX]->ext.extensions[slot] =
+ cnx->hooks[egl_connection_t::GLESv2_INDEX]->ext.extensions[slot] =
#if EGL_TRACE
- debugHooks->ext.extensions[slot] =
- gHooksTrace.ext.extensions[slot] =
+ debugHooks->ext.extensions[slot] =
+ gHooksTrace.ext.extensions[slot] =
#endif
- cnx->egl.eglGetProcAddress(procname);
- }
+ cnx->egl.eglGetProcAddress(procname);
}
+
if (found) {
addr = gExtensionForwarders[slot];
-
- if (!strcmp(procname, "glEGLImageTargetTexture2DOES")) {
- glEGLImageTargetTexture2DOES_impl = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)addr;
- addr = (__eglMustCastToProperFunctionPointerType)glEGLImageTargetTexture2DOES_wrapper;
- }
- if (!strcmp(procname, "glEGLImageTargetRenderbufferStorageOES")) {
- glEGLImageTargetRenderbufferStorageOES_impl = (PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC)addr;
- addr = (__eglMustCastToProperFunctionPointerType)glEGLImageTargetRenderbufferStorageOES_wrapper;
- }
-
sGLExtentionMap.add(name, addr);
sGLExtentionSlot++;
}
@@ -937,7 +727,7 @@
#endif
egl_surface_t const * const s = get_surface(draw);
- return s->cnx->egl.eglSwapBuffers(dp->disp[s->impl].dpy, s->surface);
+ return s->cnx->egl.eglSwapBuffers(dp->disp.dpy, s->surface);
}
EGLBoolean eglCopyBuffers( EGLDisplay dpy, EGLSurface surface,
@@ -953,8 +743,7 @@
return setError(EGL_BAD_SURFACE, EGL_FALSE);
egl_surface_t const * const s = get_surface(surface);
- return s->cnx->egl.eglCopyBuffers(
- dp->disp[s->impl].dpy, s->surface, target);
+ return s->cnx->egl.eglCopyBuffers(dp->disp.dpy, s->surface, target);
}
const char* eglQueryString(EGLDisplay dpy, EGLint name)
@@ -973,12 +762,8 @@
return dp->getExtensionString();
case EGL_CLIENT_APIS:
return dp->getClientApiString();
- case EGL_VERSION_HW_ANDROID: {
- if (gEGLImpl[IMPL_HARDWARE].dso) {
- return dp->disp[IMPL_HARDWARE].queryString.version;
- }
- return dp->disp[IMPL_SOFTWARE].queryString.version;
- }
+ case EGL_VERSION_HW_ANDROID:
+ return dp->disp.queryString.version;
}
return setError(EGL_BAD_PARAMETER, (const char *)0);
}
@@ -1003,7 +788,7 @@
egl_surface_t const * const s = get_surface(surface);
if (s->cnx->egl.eglSurfaceAttrib) {
return s->cnx->egl.eglSurfaceAttrib(
- dp->disp[s->impl].dpy, s->surface, attribute, value);
+ dp->disp.dpy, s->surface, attribute, value);
}
return setError(EGL_BAD_SURFACE, EGL_FALSE);
}
@@ -1023,7 +808,7 @@
egl_surface_t const * const s = get_surface(surface);
if (s->cnx->egl.eglBindTexImage) {
return s->cnx->egl.eglBindTexImage(
- dp->disp[s->impl].dpy, s->surface, buffer);
+ dp->disp.dpy, s->surface, buffer);
}
return setError(EGL_BAD_SURFACE, EGL_FALSE);
}
@@ -1043,7 +828,7 @@
egl_surface_t const * const s = get_surface(surface);
if (s->cnx->egl.eglReleaseTexImage) {
return s->cnx->egl.eglReleaseTexImage(
- dp->disp[s->impl].dpy, s->surface, buffer);
+ dp->disp.dpy, s->surface, buffer);
}
return setError(EGL_BAD_SURFACE, EGL_FALSE);
}
@@ -1056,17 +841,11 @@
if (!dp) return EGL_FALSE;
EGLBoolean res = EGL_TRUE;
- for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- if (cnx->dso) {
- if (cnx->egl.eglSwapInterval) {
- if (cnx->egl.eglSwapInterval(
- dp->disp[i].dpy, interval) == EGL_FALSE) {
- res = EGL_FALSE;
- }
- }
- }
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && cnx->egl.eglSwapInterval) {
+ res = cnx->egl.eglSwapInterval(dp->disp.dpy, interval);
}
+
return res;
}
@@ -1079,23 +858,15 @@
{
clearError();
- // could be called before eglInitialize(), but we wouldn't have a context
- // then, and this function would return GL_TRUE, which isn't wrong.
- EGLBoolean res = EGL_TRUE;
- EGLContext ctx = getContext();
- if (ctx) {
- egl_context_t const * const c = get_context(ctx);
- if (!c) return setError(EGL_BAD_CONTEXT, EGL_FALSE);
- if (uint32_t(c->impl)>=2)
- return setError(EGL_BAD_CONTEXT, EGL_FALSE);
- egl_connection_t* const cnx = &gEGLImpl[c->impl];
- if (!cnx->dso)
- return setError(EGL_BAD_CONTEXT, EGL_FALSE);
- if (cnx->egl.eglWaitClient) {
- res = cnx->egl.eglWaitClient();
- } else {
- res = cnx->egl.eglWaitGL();
- }
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (!cnx->dso)
+ return setError(EGL_BAD_CONTEXT, EGL_FALSE);
+
+ EGLBoolean res;
+ if (cnx->egl.eglWaitClient) {
+ res = cnx->egl.eglWaitClient();
+ } else {
+ res = cnx->egl.eglWaitGL();
}
return res;
}
@@ -1110,15 +881,9 @@
// bind this API on all EGLs
EGLBoolean res = EGL_TRUE;
- for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- if (cnx->dso) {
- if (cnx->egl.eglBindAPI) {
- if (cnx->egl.eglBindAPI(api) == EGL_FALSE) {
- res = EGL_FALSE;
- }
- }
- }
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && cnx->egl.eglBindAPI) {
+ res = cnx->egl.eglBindAPI(api);
}
return res;
}
@@ -1131,16 +896,11 @@
return setError(EGL_BAD_PARAMETER, EGL_FALSE);
}
- for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- if (cnx->dso) {
- if (cnx->egl.eglQueryAPI) {
- // the first one we find is okay, because they all
- // should be the same
- return cnx->egl.eglQueryAPI();
- }
- }
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && cnx->egl.eglQueryAPI) {
+ return cnx->egl.eglQueryAPI();
}
+
// or, it can only be OpenGL ES
return EGL_OPENGL_ES_API;
}
@@ -1152,14 +912,11 @@
// If there is context bound to the thread, release it
egl_display_t::loseCurrent(get_context(getContext()));
- for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- if (cnx->dso) {
- if (cnx->egl.eglReleaseThread) {
- cnx->egl.eglReleaseThread();
- }
- }
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && cnx->egl.eglReleaseThread) {
+ cnx->egl.eglReleaseThread();
}
+
egl_tls_t::clearTLS();
#if EGL_TRACE
if (gEGLDebugLevel > 0)
@@ -1179,9 +936,7 @@
if (!cnx) return EGL_FALSE;
if (cnx->egl.eglCreatePbufferFromClientBuffer) {
return cnx->egl.eglCreatePbufferFromClientBuffer(
- dp->disp[ dp->configs[intptr_t(config)].impl ].dpy,
- buftype, buffer,
- dp->configs[intptr_t(config)].config, attrib_list);
+ dp->disp.dpy, buftype, buffer, config, attrib_list);
}
return setError(EGL_BAD_CONFIG, EGL_NO_SURFACE);
}
@@ -1205,7 +960,7 @@
egl_surface_t const * const s = get_surface(surface);
if (s->cnx->egl.eglLockSurfaceKHR) {
return s->cnx->egl.eglLockSurfaceKHR(
- dp->disp[s->impl].dpy, s->surface, attrib_list);
+ dp->disp.dpy, s->surface, attrib_list);
}
return setError(EGL_BAD_DISPLAY, EGL_FALSE);
}
@@ -1223,8 +978,7 @@
egl_surface_t const * const s = get_surface(surface);
if (s->cnx->egl.eglUnlockSurfaceKHR) {
- return s->cnx->egl.eglUnlockSurfaceKHR(
- dp->disp[s->impl].dpy, s->surface);
+ return s->cnx->egl.eglUnlockSurfaceKHR(dp->disp.dpy, s->surface);
}
return setError(EGL_BAD_DISPLAY, EGL_FALSE);
}
@@ -1237,67 +991,18 @@
egl_display_t const * const dp = validate_display(dpy);
if (!dp) return EGL_NO_IMAGE_KHR;
- if (ctx != EGL_NO_CONTEXT) {
- ContextRef _c(dp, ctx);
- if (!_c.get())
- return setError(EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR);
- egl_context_t * const c = get_context(ctx);
- // since we have an EGLContext, we know which implementation to use
- EGLImageKHR image = c->cnx->egl.eglCreateImageKHR(
- dp->disp[c->impl].dpy, c->context, target, buffer, attrib_list);
- if (image == EGL_NO_IMAGE_KHR)
- return image;
-
- egl_image_t* result = new egl_image_t(dpy, ctx);
- result->images[c->impl] = image;
- return (EGLImageKHR)result;
- } else {
- // EGL_NO_CONTEXT is a valid parameter
+ ContextRef _c(dp, ctx);
+ egl_context_t * const c = _c.get();
- /* Since we don't have a way to know which implementation to call,
- * we're calling all of them. If at least one of the implementation
- * succeeded, this is a success.
- */
-
- EGLint currentError = eglGetError();
-
- EGLImageKHR implImages[IMPL_NUM_IMPLEMENTATIONS];
- bool success = false;
- for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- implImages[i] = EGL_NO_IMAGE_KHR;
- if (cnx->dso) {
- if (cnx->egl.eglCreateImageKHR) {
- implImages[i] = cnx->egl.eglCreateImageKHR(
- dp->disp[i].dpy, ctx, target, buffer, attrib_list);
- if (implImages[i] != EGL_NO_IMAGE_KHR) {
- success = true;
- }
- }
- }
- }
-
- if (!success) {
- // failure, if there was an error when we entered this function,
- // the error flag must not be updated.
- // Otherwise, the error is whatever happened in the implementation
- // that faulted.
- if (currentError != EGL_SUCCESS) {
- setError(currentError, EGL_NO_IMAGE_KHR);
- }
- return EGL_NO_IMAGE_KHR;
- } else {
- // In case of success, we need to clear all error flags
- // (especially those caused by the implementation that didn't
- // succeed). TODO: we could avoid this if we knew this was
- // a "full" success (all implementation succeeded).
- eglGetError();
- }
-
- egl_image_t* result = new egl_image_t(dpy, ctx);
- memcpy(result->images, implImages, sizeof(implImages));
- return (EGLImageKHR)result;
+ EGLImageKHR result = EGL_NO_IMAGE_KHR;
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && cnx->egl.eglCreateImageKHR) {
+ result = cnx->egl.eglCreateImageKHR(
+ dp->disp.dpy,
+ c ? c->context : EGL_NO_CONTEXT,
+ target, buffer, attrib_list);
}
+ return result;
}
EGLBoolean eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR img)
@@ -1307,29 +1012,10 @@
egl_display_t const * const dp = validate_display(dpy);
if (!dp) return EGL_FALSE;
- ImageRef _i(dp, img);
- if (!_i.get()) return setError(EGL_BAD_PARAMETER, EGL_FALSE);
-
- egl_image_t* image = get_image(img);
- bool success = false;
- for (int i=0 ; i<IMPL_NUM_IMPLEMENTATIONS ; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- if (image->images[i] != EGL_NO_IMAGE_KHR) {
- if (cnx->dso) {
- if (cnx->egl.eglDestroyImageKHR) {
- if (cnx->egl.eglDestroyImageKHR(
- dp->disp[i].dpy, image->images[i])) {
- success = true;
- }
- }
- }
- }
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && cnx->egl.eglDestroyImageKHR) {
+ cnx->egl.eglDestroyImageKHR(dp->disp.dpy, img);
}
- if (!success)
- return EGL_FALSE;
-
- _i.terminate();
-
return EGL_TRUE;
}
@@ -1345,21 +1031,12 @@
egl_display_t const * const dp = validate_display(dpy);
if (!dp) return EGL_NO_SYNC_KHR;
- EGLContext ctx = eglGetCurrentContext();
- ContextRef _c(dp, ctx);
- if (!_c.get())
- return setError(EGL_BAD_CONTEXT, EGL_NO_SYNC_KHR);
-
- egl_context_t * const c = get_context(ctx);
EGLSyncKHR result = EGL_NO_SYNC_KHR;
- if (c->cnx->egl.eglCreateSyncKHR) {
- EGLSyncKHR sync = c->cnx->egl.eglCreateSyncKHR(
- dp->disp[c->impl].dpy, type, attrib_list);
- if (sync == EGL_NO_SYNC_KHR)
- return sync;
- result = (egl_sync_t*)new egl_sync_t(dpy, ctx, sync);
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && cnx->egl.eglCreateSyncKHR) {
+ result = cnx->egl.eglCreateSyncKHR(dp->disp.dpy, type, attrib_list);
}
- return (EGLSyncKHR)result;
+ return result;
}
EGLBoolean eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
@@ -1369,75 +1046,46 @@
egl_display_t const * const dp = validate_display(dpy);
if (!dp) return EGL_FALSE;
- SyncRef _s(dp, sync);
- if (!_s.get()) return setError(EGL_BAD_PARAMETER, EGL_FALSE);
- egl_sync_t* syncObject = get_sync(sync);
-
- EGLContext ctx = syncObject->context;
- ContextRef _c(dp, ctx);
- if (!_c.get())
- return setError(EGL_BAD_CONTEXT, EGL_FALSE);
-
EGLBoolean result = EGL_FALSE;
- egl_context_t * const c = get_context(ctx);
- if (c->cnx->egl.eglDestroySyncKHR) {
- result = c->cnx->egl.eglDestroySyncKHR(
- dp->disp[c->impl].dpy, syncObject->sync);
- if (result)
- _s.terminate();
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && cnx->egl.eglDestroySyncKHR) {
+ result = cnx->egl.eglDestroySyncKHR(dp->disp.dpy, sync);
}
return result;
}
-EGLint eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout)
+EGLint eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync,
+ EGLint flags, EGLTimeKHR timeout)
{
clearError();
egl_display_t const * const dp = validate_display(dpy);
if (!dp) return EGL_FALSE;
- SyncRef _s(dp, sync);
- if (!_s.get()) return setError(EGL_BAD_PARAMETER, EGL_FALSE);
- egl_sync_t* syncObject = get_sync(sync);
-
- EGLContext ctx = syncObject->context;
- ContextRef _c(dp, ctx);
- if (!_c.get())
- return setError(EGL_BAD_CONTEXT, EGL_FALSE);
-
- egl_context_t * const c = get_context(ctx);
- if (c->cnx->egl.eglClientWaitSyncKHR) {
- return c->cnx->egl.eglClientWaitSyncKHR(
- dp->disp[c->impl].dpy, syncObject->sync, flags, timeout);
+ EGLBoolean result = EGL_FALSE;
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && cnx->egl.eglClientWaitSyncKHR) {
+ result = cnx->egl.eglClientWaitSyncKHR(
+ dp->disp.dpy, sync, flags, timeout);
}
-
- return EGL_FALSE;
+ return result;
}
-EGLBoolean eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value)
+EGLBoolean eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync,
+ EGLint attribute, EGLint *value)
{
clearError();
egl_display_t const * const dp = validate_display(dpy);
if (!dp) return EGL_FALSE;
- SyncRef _s(dp, sync);
- if (!_s.get())
- return setError(EGL_BAD_PARAMETER, EGL_FALSE);
-
- egl_sync_t* syncObject = get_sync(sync);
- EGLContext ctx = syncObject->context;
- ContextRef _c(dp, ctx);
- if (!_c.get())
- return setError(EGL_BAD_CONTEXT, EGL_FALSE);
-
- egl_context_t * const c = get_context(ctx);
- if (c->cnx->egl.eglGetSyncAttribKHR) {
- return c->cnx->egl.eglGetSyncAttribKHR(
- dp->disp[c->impl].dpy, syncObject->sync, attribute, value);
+ EGLBoolean result = EGL_FALSE;
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && cnx->egl.eglGetSyncAttribKHR) {
+ result = cnx->egl.eglGetSyncAttribKHR(
+ dp->disp.dpy, sync, attribute, value);
}
-
- return EGL_FALSE;
+ return result;
}
// ----------------------------------------------------------------------------
@@ -1458,12 +1106,10 @@
}
EGLuint64NV ret = 0;
- egl_connection_t* const cnx = &gEGLImpl[IMPL_HARDWARE];
+ egl_connection_t* const cnx = &gEGLImpl;
- if (cnx->dso) {
- if (cnx->egl.eglGetSystemTimeFrequencyNV) {
- return cnx->egl.eglGetSystemTimeFrequencyNV();
- }
+ if (cnx->dso && cnx->egl.eglGetSystemTimeFrequencyNV) {
+ return cnx->egl.eglGetSystemTimeFrequencyNV();
}
return setErrorQuiet(EGL_BAD_DISPLAY, 0);
@@ -1478,12 +1124,10 @@
}
EGLuint64NV ret = 0;
- egl_connection_t* const cnx = &gEGLImpl[IMPL_HARDWARE];
+ egl_connection_t* const cnx = &gEGLImpl;
- if (cnx->dso) {
- if (cnx->egl.eglGetSystemTimeNV) {
- return cnx->egl.eglGetSystemTimeNV();
- }
+ if (cnx->dso && cnx->egl.eglGetSystemTimeNV) {
+ return cnx->egl.eglGetSystemTimeNV();
}
return setErrorQuiet(EGL_BAD_DISPLAY, 0);
diff --git a/opengl/libs/EGL/egl_cache.cpp b/opengl/libs/EGL/egl_cache.cpp
index 7fd6519..c79fb5f 100644
--- a/opengl/libs/EGL/egl_cache.cpp
+++ b/opengl/libs/EGL/egl_cache.cpp
@@ -83,39 +83,39 @@
void egl_cache_t::initialize(egl_display_t *display) {
Mutex::Autolock lock(mMutex);
- for (int i = 0; i < IMPL_NUM_IMPLEMENTATIONS; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- if (cnx->dso && cnx->major >= 0 && cnx->minor >= 0) {
- const char* exts = display->disp[i].queryString.extensions;
- size_t bcExtLen = strlen(BC_EXT_STR);
- size_t extsLen = strlen(exts);
- bool equal = !strcmp(BC_EXT_STR, exts);
- bool atStart = !strncmp(BC_EXT_STR " ", exts, bcExtLen+1);
- bool atEnd = (bcExtLen+1) < extsLen &&
- !strcmp(" " BC_EXT_STR, exts + extsLen - (bcExtLen+1));
- bool inMiddle = strstr(exts, " " BC_EXT_STR " ");
- if (equal || atStart || atEnd || inMiddle) {
- PFNEGLSETBLOBCACHEFUNCSANDROIDPROC eglSetBlobCacheFuncsANDROID;
- eglSetBlobCacheFuncsANDROID =
- reinterpret_cast<PFNEGLSETBLOBCACHEFUNCSANDROIDPROC>(
+
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && cnx->major >= 0 && cnx->minor >= 0) {
+ const char* exts = display->disp.queryString.extensions;
+ size_t bcExtLen = strlen(BC_EXT_STR);
+ size_t extsLen = strlen(exts);
+ bool equal = !strcmp(BC_EXT_STR, exts);
+ bool atStart = !strncmp(BC_EXT_STR " ", exts, bcExtLen+1);
+ bool atEnd = (bcExtLen+1) < extsLen &&
+ !strcmp(" " BC_EXT_STR, exts + extsLen - (bcExtLen+1));
+ bool inMiddle = strstr(exts, " " BC_EXT_STR " ");
+ if (equal || atStart || atEnd || inMiddle) {
+ PFNEGLSETBLOBCACHEFUNCSANDROIDPROC eglSetBlobCacheFuncsANDROID;
+ eglSetBlobCacheFuncsANDROID =
+ reinterpret_cast<PFNEGLSETBLOBCACHEFUNCSANDROIDPROC>(
cnx->egl.eglGetProcAddress(
"eglSetBlobCacheFuncsANDROID"));
- if (eglSetBlobCacheFuncsANDROID == NULL) {
- ALOGE("EGL_ANDROID_blob_cache advertised by display %d, "
- "but unable to get eglSetBlobCacheFuncsANDROID", i);
- continue;
- }
+ if (eglSetBlobCacheFuncsANDROID == NULL) {
+ ALOGE("EGL_ANDROID_blob_cache advertised, "
+ "but unable to get eglSetBlobCacheFuncsANDROID");
+ return;
+ }
- eglSetBlobCacheFuncsANDROID(display->disp[i].dpy,
- android::setBlob, android::getBlob);
- EGLint err = cnx->egl.eglGetError();
- if (err != EGL_SUCCESS) {
- ALOGE("eglSetBlobCacheFuncsANDROID resulted in an error: "
- "%#x", err);
- }
+ eglSetBlobCacheFuncsANDROID(display->disp.dpy,
+ android::setBlob, android::getBlob);
+ EGLint err = cnx->egl.eglGetError();
+ if (err != EGL_SUCCESS) {
+ ALOGE("eglSetBlobCacheFuncsANDROID resulted in an error: "
+ "%#x", err);
}
}
}
+
mInitialized = true;
}
diff --git a/opengl/libs/EGL/egl_display.cpp b/opengl/libs/EGL/egl_display.cpp
index 6b2ae51..c85b4ce 100644
--- a/opengl/libs/EGL/egl_display.cpp
+++ b/opengl/libs/EGL/egl_display.cpp
@@ -60,18 +60,12 @@
extern void initEglTraceLevel();
extern void setGLHooksThreadSpecific(gl_hooks_t const *value);
-static int cmp_configs(const void* a, const void *b) {
- const egl_config_t& c0 = *(egl_config_t const *)a;
- const egl_config_t& c1 = *(egl_config_t const *)b;
- return c0<c1 ? -1 : (c1<c0 ? 1 : 0);
-}
-
// ----------------------------------------------------------------------------
egl_display_t egl_display_t::sDisplay[NUM_DISPLAYS];
egl_display_t::egl_display_t() :
- magic('_dpy'), numTotalConfigs(0), configs(0), refs(0) {
+ magic('_dpy'), refs(0) {
}
egl_display_t::~egl_display_t() {
@@ -119,15 +113,13 @@
// get our driver loader
Loader& loader(Loader::getInstance());
- for (int i = 0; i < IMPL_NUM_IMPLEMENTATIONS; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- if (cnx->dso && disp[i].dpy == EGL_NO_DISPLAY) {
- EGLDisplay dpy = cnx->egl.eglGetDisplay(display);
- disp[i].dpy = dpy;
- if (dpy == EGL_NO_DISPLAY) {
- loader.close(cnx->dso);
- cnx->dso = NULL;
- }
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && disp.dpy == EGL_NO_DISPLAY) {
+ EGLDisplay dpy = cnx->egl.eglGetDisplay(display);
+ disp.dpy = dpy;
+ if (dpy == EGL_NO_DISPLAY) {
+ loader.close(cnx->dso);
+ cnx->dso = NULL;
}
}
@@ -160,12 +152,11 @@
// initialize each EGL and
// build our own extension string first, based on the extension we know
// and the extension supported by our client implementation
- for (int i = 0; i < IMPL_NUM_IMPLEMENTATIONS; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- cnx->major = -1;
- cnx->minor = -1;
- if (!cnx->dso)
- continue;
+
+ egl_connection_t* const cnx = &gEGLImpl;
+ cnx->major = -1;
+ cnx->minor = -1;
+ if (cnx->dso) {
#if defined(ADRENO130)
#warning "Adreno-130 eglInitialize() workaround"
@@ -177,31 +168,30 @@
* eglGetDisplay() before calling eglInitialize();
*/
if (i == IMPL_HARDWARE) {
- disp[i].dpy =
- cnx->egl.eglGetDisplay(EGL_DEFAULT_DISPLAY);
+ disp[i].dpy = cnx->egl.eglGetDisplay(EGL_DEFAULT_DISPLAY);
}
#endif
- EGLDisplay idpy = disp[i].dpy;
+ EGLDisplay idpy = disp.dpy;
if (cnx->egl.eglInitialize(idpy, &cnx->major, &cnx->minor)) {
- //ALOGD("initialized %d dpy=%p, ver=%d.%d, cnx=%p",
- // i, idpy, cnx->major, cnx->minor, cnx);
+ //ALOGD("initialized dpy=%p, ver=%d.%d, cnx=%p",
+ // idpy, cnx->major, cnx->minor, cnx);
// display is now initialized
- disp[i].state = egl_display_t::INITIALIZED;
+ disp.state = egl_display_t::INITIALIZED;
// get the query-strings for this display for each implementation
- disp[i].queryString.vendor = cnx->egl.eglQueryString(idpy,
+ disp.queryString.vendor = cnx->egl.eglQueryString(idpy,
EGL_VENDOR);
- disp[i].queryString.version = cnx->egl.eglQueryString(idpy,
+ disp.queryString.version = cnx->egl.eglQueryString(idpy,
EGL_VERSION);
- disp[i].queryString.extensions = cnx->egl.eglQueryString(idpy,
+ disp.queryString.extensions = cnx->egl.eglQueryString(idpy,
EGL_EXTENSIONS);
- disp[i].queryString.clientApi = cnx->egl.eglQueryString(idpy,
+ disp.queryString.clientApi = cnx->egl.eglQueryString(idpy,
EGL_CLIENT_APIS);
} else {
- ALOGW("%d: eglInitialize(%p) failed (%s)", i, idpy,
+ ALOGW("eglInitialize(%p) failed (%s)", idpy,
egl_tls_t::egl_strerror(cnx->egl.eglGetError()));
}
}
@@ -211,7 +201,7 @@
mVersionString.setTo(sVersionString);
mClientApiString.setTo(sClientApiString);
- // we only add extensions that exist in at least one implementation
+ // we only add extensions that exist in the implementation
char const* start = sExtensionString;
char const* end;
do {
@@ -223,15 +213,13 @@
if (len) {
// NOTE: we could avoid the copy if we had strnstr.
const String8 ext(start, len);
- // now go through all implementations and look for this extension
- for (int i = 0; i < IMPL_NUM_IMPLEMENTATIONS; i++) {
- if (disp[i].queryString.extensions) {
- // if we find it, add this extension string to our list
- // (and don't forget the space)
- const char* match = strstr(disp[i].queryString.extensions, ext.string());
- if (match && (match[len] == ' ' || match[len] == 0)) {
- mExtensionString.append(start, len+1);
- }
+ // now look for this extension
+ if (disp.queryString.extensions) {
+ // if we find it, add this extension string to our list
+ // (and don't forget the space)
+ const char* match = strstr(disp.queryString.extensions, ext.string());
+ if (match && (match[len] == ' ' || match[len] == 0)) {
+ mExtensionString.append(start, len+1);
}
}
}
@@ -242,52 +230,12 @@
egl_cache_t::get()->initialize(this);
- EGLBoolean res = EGL_FALSE;
- for (int i = 0; i < IMPL_NUM_IMPLEMENTATIONS; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- if (cnx->dso && cnx->major >= 0 && cnx->minor >= 0) {
- EGLint n;
- if (cnx->egl.eglGetConfigs(disp[i].dpy, 0, 0, &n)) {
- disp[i].config = (EGLConfig*) malloc(sizeof(EGLConfig) * n);
- if (disp[i].config) {
- if (cnx->egl.eglGetConfigs(disp[i].dpy, disp[i].config, n,
- &disp[i].numConfigs)) {
- numTotalConfigs += n;
- res = EGL_TRUE;
- }
- }
- }
- }
- }
-
- if (res == EGL_TRUE) {
- configs = new egl_config_t[numTotalConfigs];
- for (int i = 0, k = 0; i < IMPL_NUM_IMPLEMENTATIONS; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- if (cnx->dso && cnx->major >= 0 && cnx->minor >= 0) {
- for (int j = 0; j < disp[i].numConfigs; j++) {
- configs[k].impl = i;
- configs[k].config = disp[i].config[j];
- configs[k].configId = k + 1; // CONFIG_ID start at 1
- // store the implementation's CONFIG_ID
- cnx->egl.eglGetConfigAttrib(disp[i].dpy, disp[i].config[j],
- EGL_CONFIG_ID, &configs[k].implConfigId);
- k++;
- }
- }
- }
-
- // sort our configurations so we can do binary-searches
- qsort(configs, numTotalConfigs, sizeof(egl_config_t), cmp_configs);
-
- refs++;
- if (major != NULL)
- *major = VERSION_MAJOR;
- if (minor != NULL)
- *minor = VERSION_MINOR;
- return EGL_TRUE;
- }
- return setError(EGL_NOT_INITIALIZED, EGL_FALSE);
+ refs++;
+ if (major != NULL)
+ *major = VERSION_MAJOR;
+ if (minor != NULL)
+ *minor = VERSION_MINOR;
+ return EGL_TRUE;
}
EGLBoolean egl_display_t::terminate() {
@@ -305,22 +253,15 @@
}
EGLBoolean res = EGL_FALSE;
- for (int i = 0; i < IMPL_NUM_IMPLEMENTATIONS; i++) {
- egl_connection_t* const cnx = &gEGLImpl[i];
- if (cnx->dso && disp[i].state == egl_display_t::INITIALIZED) {
- if (cnx->egl.eglTerminate(disp[i].dpy) == EGL_FALSE) {
- ALOGW("%d: eglTerminate(%p) failed (%s)", i, disp[i].dpy,
- egl_tls_t::egl_strerror(cnx->egl.eglGetError()));
- }
- // REVISIT: it's unclear what to do if eglTerminate() fails
- free(disp[i].config);
-
- disp[i].numConfigs = 0;
- disp[i].config = 0;
- disp[i].state = egl_display_t::TERMINATED;
-
- res = EGL_TRUE;
+ egl_connection_t* const cnx = &gEGLImpl;
+ if (cnx->dso && disp.state == egl_display_t::INITIALIZED) {
+ if (cnx->egl.eglTerminate(disp.dpy) == EGL_FALSE) {
+ ALOGW("eglTerminate(%p) failed (%s)", disp.dpy,
+ egl_tls_t::egl_strerror(cnx->egl.eglGetError()));
}
+ // REVISIT: it's unclear what to do if eglTerminate() fails
+ disp.state = egl_display_t::TERMINATED;
+ res = EGL_TRUE;
}
// Mark all objects remaining in the list as terminated, unless
@@ -337,8 +278,6 @@
objects.clear();
refs--;
- numTotalConfigs = 0;
- delete[] configs;
return res;
}
@@ -390,13 +329,13 @@
Mutex::Autolock _l(lock);
if (c) {
result = c->cnx->egl.eglMakeCurrent(
- disp[c->impl].dpy, impl_draw, impl_read, impl_ctx);
+ disp.dpy, impl_draw, impl_read, impl_ctx);
if (result == EGL_TRUE) {
c->onMakeCurrent(draw, read);
}
} else {
result = cur_c->cnx->egl.eglMakeCurrent(
- disp[cur_c->impl].dpy, impl_draw, impl_read, impl_ctx);
+ disp.dpy, impl_draw, impl_read, impl_ctx);
if (result == EGL_TRUE) {
cur_c->onLooseCurrent();
}
diff --git a/opengl/libs/EGL/egl_display.h b/opengl/libs/EGL/egl_display.h
index f3c4ddf..6348228 100644
--- a/opengl/libs/EGL/egl_display.h
+++ b/opengl/libs/EGL/egl_display.h
@@ -44,23 +44,6 @@
// ----------------------------------------------------------------------------
-struct egl_config_t {
- egl_config_t() {}
- egl_config_t(int impl, EGLConfig config)
- : impl(impl), config(config), configId(0), implConfigId(0) { }
- int impl; // the implementation this config is for
- EGLConfig config; // the implementation's EGLConfig
- EGLint configId; // our CONFIG_ID
- EGLint implConfigId; // the implementation's CONFIG_ID
- inline bool operator < (const egl_config_t& rhs) const {
- if (impl < rhs.impl) return true;
- if (impl > rhs.impl) return false;
- return config < rhs.config;
- }
-};
-
-// ----------------------------------------------------------------------------
-
class EGLAPI egl_display_t { // marked as EGLAPI for testing purposes
static egl_display_t sDisplay[NUM_DISPLAYS];
EGLDisplay getDisplay(EGLNativeDisplayType display);
@@ -113,12 +96,9 @@
};
struct DisplayImpl {
- DisplayImpl() : dpy(EGL_NO_DISPLAY), config(0),
- state(NOT_INITIALIZED), numConfigs(0) { }
+ DisplayImpl() : dpy(EGL_NO_DISPLAY), state(NOT_INITIALIZED) { }
EGLDisplay dpy;
- EGLConfig* config;
EGLint state;
- EGLint numConfigs;
strings_t queryString;
};
@@ -126,9 +106,7 @@
uint32_t magic;
public:
- DisplayImpl disp[IMPL_NUM_IMPLEMENTATIONS];
- EGLint numTotalConfigs;
- egl_config_t* configs;
+ DisplayImpl disp;
private:
uint32_t refs;
diff --git a/opengl/libs/EGL/egl_object.cpp b/opengl/libs/EGL/egl_object.cpp
index b660c53..d0cbb31 100644
--- a/opengl/libs/EGL/egl_object.cpp
+++ b/opengl/libs/EGL/egl_object.cpp
@@ -64,9 +64,9 @@
// ----------------------------------------------------------------------------
egl_context_t::egl_context_t(EGLDisplay dpy, EGLContext context, EGLConfig config,
- int impl, egl_connection_t const* cnx, int version) :
+ egl_connection_t const* cnx, int version) :
egl_object_t(get_display(dpy)), dpy(dpy), context(context),
- config(config), read(0), draw(0), impl(impl), cnx(cnx),
+ config(config), read(0), draw(0), cnx(cnx),
version(version)
{
}
@@ -87,7 +87,7 @@
if (gl_extensions.isEmpty()) {
// call the implementation's glGetString(GL_EXTENSIONS)
- const char* exts = (const char *)gEGLImpl[impl].hooks[version]->gl.glGetString(GL_EXTENSIONS);
+ const char* exts = (const char *)gEGLImpl.hooks[version]->gl.glGetString(GL_EXTENSIONS);
gl_extensions.setTo(exts);
if (gl_extensions.find("GL_EXT_debug_marker") < 0) {
String8 temp("GL_EXT_debug_marker ");
diff --git a/opengl/libs/EGL/egl_object.h b/opengl/libs/EGL/egl_object.h
index abd4cbb..4d91f54 100644
--- a/opengl/libs/EGL/egl_object.h
+++ b/opengl/libs/EGL/egl_object.h
@@ -125,7 +125,7 @@
// ----------------------------------------------------------------------------
-class egl_surface_t: public egl_object_t {
+class egl_surface_t : public egl_object_t {
protected:
~egl_surface_t() {
ANativeWindow* const window = win.get();
@@ -140,15 +140,14 @@
typedef egl_object_t::LocalRef<egl_surface_t, EGLSurface> Ref;
egl_surface_t(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win,
- EGLSurface surface, int impl, egl_connection_t const* cnx) :
+ EGLSurface surface, egl_connection_t const* cnx) :
egl_object_t(get_display(dpy)), dpy(dpy), surface(surface),
- config(config), win(win), impl(impl), cnx(cnx) {
+ config(config), win(win), cnx(cnx) {
}
EGLDisplay dpy;
EGLSurface surface;
EGLConfig config;
sp<ANativeWindow> win;
- int impl;
egl_connection_t const* cnx;
};
@@ -159,7 +158,7 @@
typedef egl_object_t::LocalRef<egl_context_t, EGLContext> Ref;
egl_context_t(EGLDisplay dpy, EGLContext context, EGLConfig config,
- int impl, egl_connection_t const* cnx, int version);
+ egl_connection_t const* cnx, int version);
void onLooseCurrent();
void onMakeCurrent(EGLSurface draw, EGLSurface read);
@@ -169,47 +168,15 @@
EGLConfig config;
EGLSurface read;
EGLSurface draw;
- int impl;
egl_connection_t const* cnx;
int version;
String8 gl_extensions;
};
-class egl_image_t: public egl_object_t {
-protected:
- ~egl_image_t() {}
-public:
- typedef egl_object_t::LocalRef<egl_image_t, EGLImageKHR> Ref;
-
- egl_image_t(EGLDisplay dpy, EGLContext context) :
- egl_object_t(get_display(dpy)), dpy(dpy), context(context) {
- memset(images, 0, sizeof(images));
- }
- EGLDisplay dpy;
- EGLContext context;
- EGLImageKHR images[IMPL_NUM_IMPLEMENTATIONS];
-};
-
-class egl_sync_t: public egl_object_t {
-protected:
- ~egl_sync_t() {}
-public:
- typedef egl_object_t::LocalRef<egl_sync_t, EGLSyncKHR> Ref;
-
- egl_sync_t(EGLDisplay dpy, EGLContext context, EGLSyncKHR sync) :
- egl_object_t(get_display(dpy)), dpy(dpy), context(context), sync(sync) {
- }
- EGLDisplay dpy;
- EGLContext context;
- EGLSyncKHR sync;
-};
-
// ----------------------------------------------------------------------------
typedef egl_surface_t::Ref SurfaceRef;
typedef egl_context_t::Ref ContextRef;
-typedef egl_image_t::Ref ImageRef;
-typedef egl_sync_t::Ref SyncRef;
// ----------------------------------------------------------------------------
@@ -228,16 +195,6 @@
return egl_to_native_cast<egl_context_t>(context);
}
-static inline
-egl_image_t* get_image(EGLImageKHR image) {
- return egl_to_native_cast<egl_image_t>(image);
-}
-
-static inline
-egl_sync_t* get_sync(EGLSyncKHR sync) {
- return egl_to_native_cast<egl_sync_t>(sync);
-}
-
// ----------------------------------------------------------------------------
}; // namespace android
// ----------------------------------------------------------------------------
diff --git a/opengl/libs/EGL/egldefs.h b/opengl/libs/EGL/egldefs.h
index ff20957..c900c1c 100644
--- a/opengl/libs/EGL/egldefs.h
+++ b/opengl/libs/EGL/egldefs.h
@@ -19,31 +19,24 @@
#include "hooks.h"
+#define VERSION_MAJOR 1
+#define VERSION_MINOR 4
+
// ----------------------------------------------------------------------------
namespace android {
// ----------------------------------------------------------------------------
-#define VERSION_MAJOR 1
-#define VERSION_MINOR 4
-
// EGLDisplay are global, not attached to a given thread
const unsigned int NUM_DISPLAYS = 1;
-enum {
- IMPL_HARDWARE = 0,
- IMPL_SOFTWARE,
- IMPL_NUM_IMPLEMENTATIONS
-};
-
-enum {
- GLESv1_INDEX = 0,
- GLESv2_INDEX = 1,
-};
-
// ----------------------------------------------------------------------------
-struct egl_connection_t
-{
+struct egl_connection_t {
+ enum {
+ GLESv1_INDEX = 0,
+ GLESv2_INDEX = 1
+ };
+
inline egl_connection_t() : dso(0) { }
void * dso;
gl_hooks_t * hooks[2];
@@ -54,7 +47,7 @@
// ----------------------------------------------------------------------------
-extern gl_hooks_t gHooks[2][IMPL_NUM_IMPLEMENTATIONS];
+extern gl_hooks_t gHooks[2];
extern gl_hooks_t gHooksNoContext;
extern pthread_key_t gGLWrapperKey;
extern "C" void gl_unimplemented();
@@ -63,7 +56,7 @@
extern char const * const gl_names[];
extern char const * const egl_names[];
-extern egl_connection_t gEGLImpl[IMPL_NUM_IMPLEMENTATIONS];
+extern egl_connection_t gEGLImpl;
// ----------------------------------------------------------------------------
}; // namespace android
diff --git a/opengl/libs/GLES2/gl2.cpp b/opengl/libs/GLES2/gl2.cpp
index 79aa3cd..4345c2b 100644
--- a/opengl/libs/GLES2/gl2.cpp
+++ b/opengl/libs/GLES2/gl2.cpp
@@ -124,27 +124,3 @@
}
return ret;
}
-
-/*
- * These GL calls are special because they need to EGL to retrieve some
- * informations before they can execute.
- */
-
-extern "C" void __glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
-extern "C" void __glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
-
-
-void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
-{
- GLeglImageOES implImage =
- (GLeglImageOES)egl_get_image_for_current_context((EGLImageKHR)image);
- __glEGLImageTargetTexture2DOES(target, implImage);
-}
-
-void glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
-{
- GLeglImageOES implImage =
- (GLeglImageOES)egl_get_image_for_current_context((EGLImageKHR)image);
- __glEGLImageTargetRenderbufferStorageOES(target, implImage);
-}
-
diff --git a/opengl/libs/GLES2/gl2ext_api.in b/opengl/libs/GLES2/gl2ext_api.in
index a8907fd..c381075 100644
--- a/opengl/libs/GLES2/gl2ext_api.in
+++ b/opengl/libs/GLES2/gl2ext_api.in
@@ -1,7 +1,7 @@
-void API_ENTRY(__glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image) {
+void API_ENTRY(glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image) {
CALL_GL_API(glEGLImageTargetTexture2DOES, target, image);
}
-void API_ENTRY(__glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image) {
+void API_ENTRY(glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image) {
CALL_GL_API(glEGLImageTargetRenderbufferStorageOES, target, image);
}
void API_ENTRY(glGetProgramBinaryOES)(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary) {
diff --git a/opengl/libs/GLES_CM/gl.cpp b/opengl/libs/GLES_CM/gl.cpp
index adeaa5b..adcb60d 100644
--- a/opengl/libs/GLES_CM/gl.cpp
+++ b/opengl/libs/GLES_CM/gl.cpp
@@ -179,27 +179,3 @@
}
return ret;
}
-
-/*
- * These GL calls are special because they need to EGL to retrieve some
- * informations before they can execute.
- */
-
-extern "C" void __glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
-extern "C" void __glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
-
-
-void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
-{
- GLeglImageOES implImage =
- (GLeglImageOES)egl_get_image_for_current_context((EGLImageKHR)image);
- __glEGLImageTargetTexture2DOES(target, implImage);
-}
-
-void glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
-{
- GLeglImageOES implImage =
- (GLeglImageOES)egl_get_image_for_current_context((EGLImageKHR)image);
- __glEGLImageTargetRenderbufferStorageOES(target, implImage);
-}
-
diff --git a/opengl/libs/GLES_CM/glext_api.in b/opengl/libs/GLES_CM/glext_api.in
index 268a535..7cd6cb5 100644
--- a/opengl/libs/GLES_CM/glext_api.in
+++ b/opengl/libs/GLES_CM/glext_api.in
@@ -31,10 +31,10 @@
void API_ENTRY(glDrawTexfvOES)(const GLfloat *coords) {
CALL_GL_API(glDrawTexfvOES, coords);
}
-void API_ENTRY(__glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image) {
+void API_ENTRY(glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image) {
CALL_GL_API(glEGLImageTargetTexture2DOES, target, image);
}
-void API_ENTRY(__glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image) {
+void API_ENTRY(glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image) {
CALL_GL_API(glEGLImageTargetRenderbufferStorageOES, target, image);
}
void API_ENTRY(glAlphaFuncxOES)(GLenum func, GLclampx ref) {
diff --git a/opengl/libs/GLES_trace/TODO.txt b/opengl/libs/GLES_trace/TODO.txt
deleted file mode 100644
index f5e6e95..0000000
--- a/opengl/libs/GLES_trace/TODO.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-TODO:
- - Context - Currently, we don't do anything regarding the contexts that are created.
- Need to maintain more state regarding contexts, and figure out what happens in the
- presence of multiple contexts.
-
- - Transport: Each GLMessage is sent via a socket as soon as the message is received.
- i.e., there is no buffering of messages. Buffering should improve performance.
-
- - Initialization: On first connection, send some basic information that includes:
- 1. version of the trace library
- 2. implementation dependent GL state variables such as # of vertex arrays etc.
-
- - eglSwapBuffers: The images are lzf compressed, but there is no mode that transfers
- only the differences from the previous images.
diff --git a/opengl/libs/GLES_trace/gltrace.proto b/opengl/libs/GLES_trace/gltrace.proto
index 11cf24f..2893e6e 100644
--- a/opengl/libs/GLES_trace/gltrace.proto
+++ b/opengl/libs/GLES_trace/gltrace.proto
@@ -543,11 +543,13 @@
required int32 context_id = 1; // GL context ID
required int64 start_time = 2; // time when call was invoked
- required int32 duration = 3; // duration of the call
+ required int32 duration = 3; // duration of the call (MONOTONIC TIME)
required Function function = 4 [default = invalid]; // GL function called
repeated DataType args = 5; // GL function's arguments
optional DataType returnValue = 6; // GL function's return value
optional FrameBuffer fb = 7; // contents of the framebuffer
+
+ optional int32 threadtime = 8; // duration of the call (THREAD TIME)
};
diff --git a/opengl/libs/GLES_trace/src/gltrace.pb.cpp b/opengl/libs/GLES_trace/src/gltrace.pb.cpp
index bb9d4a7..d5f8180 100644
--- a/opengl/libs/GLES_trace/src/gltrace.pb.cpp
+++ b/opengl/libs/GLES_trace/src/gltrace.pb.cpp
@@ -1663,6 +1663,7 @@
const int GLMessage::kArgsFieldNumber;
const int GLMessage::kReturnValueFieldNumber;
const int GLMessage::kFbFieldNumber;
+const int GLMessage::kThreadtimeFieldNumber;
#endif // !_MSC_VER
GLMessage::GLMessage()
@@ -1689,6 +1690,7 @@
function_ = 3000;
returnvalue_ = NULL;
fb_ = NULL;
+ threadtime_ = 0;
::memset(_has_bits_, 0, sizeof(_has_bits_));
}
@@ -1730,6 +1732,7 @@
if (_has_bit(6)) {
if (fb_ != NULL) fb_->::android::gltrace::GLMessage_FrameBuffer::Clear();
}
+ threadtime_ = 0;
}
args_.Clear();
::memset(_has_bits_, 0, sizeof(_has_bits_));
@@ -1846,6 +1849,22 @@
} else {
goto handle_uninterpreted;
}
+ if (input->ExpectTag(64)) goto parse_threadtime;
+ break;
+ }
+
+ // optional int32 threadtime = 8;
+ case 8: {
+ if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
+ ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
+ parse_threadtime:
+ DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+ ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
+ input, &threadtime_)));
+ _set_bit(7);
+ } else {
+ goto handle_uninterpreted;
+ }
if (input->ExpectAtEnd()) return true;
break;
}
@@ -1906,6 +1925,11 @@
7, this->fb(), output);
}
+ // optional int32 threadtime = 8;
+ if (_has_bit(7)) {
+ ::google::protobuf::internal::WireFormatLite::WriteInt32(8, this->threadtime(), output);
+ }
+
}
int GLMessage::ByteSize() const {
@@ -1953,6 +1977,13 @@
this->fb());
}
+ // optional int32 threadtime = 8;
+ if (has_threadtime()) {
+ total_size += 1 +
+ ::google::protobuf::internal::WireFormatLite::Int32Size(
+ this->threadtime());
+ }
+
}
// repeated .android.gltrace.GLMessage.DataType args = 5;
total_size += 1 * this->args_size();
@@ -1995,6 +2026,9 @@
if (from._has_bit(6)) {
mutable_fb()->::android::gltrace::GLMessage_FrameBuffer::MergeFrom(from.fb());
}
+ if (from._has_bit(7)) {
+ set_threadtime(from.threadtime());
+ }
}
}
@@ -2028,6 +2062,7 @@
args_.Swap(&other->args_);
std::swap(returnvalue_, other->returnvalue_);
std::swap(fb_, other->fb_);
+ std::swap(threadtime_, other->threadtime_);
std::swap(_has_bits_[0], other->_has_bits_[0]);
std::swap(_cached_size_, other->_cached_size_);
}
diff --git a/opengl/libs/GLES_trace/src/gltrace.pb.h b/opengl/libs/GLES_trace/src/gltrace.pb.h
index e3b8990..a4fcbd3 100644
--- a/opengl/libs/GLES_trace/src/gltrace.pb.h
+++ b/opengl/libs/GLES_trace/src/gltrace.pb.h
@@ -1418,6 +1418,13 @@
inline const ::android::gltrace::GLMessage_FrameBuffer& fb() const;
inline ::android::gltrace::GLMessage_FrameBuffer* mutable_fb();
+ // optional int32 threadtime = 8;
+ inline bool has_threadtime() const;
+ inline void clear_threadtime();
+ static const int kThreadtimeFieldNumber = 8;
+ inline ::google::protobuf::int32 threadtime() const;
+ inline void set_threadtime(::google::protobuf::int32 value);
+
// @@protoc_insertion_point(class_scope:android.gltrace.GLMessage)
private:
mutable int _cached_size_;
@@ -1429,11 +1436,12 @@
::google::protobuf::RepeatedPtrField< ::android::gltrace::GLMessage_DataType > args_;
::android::gltrace::GLMessage_DataType* returnvalue_;
::android::gltrace::GLMessage_FrameBuffer* fb_;
+ ::google::protobuf::int32 threadtime_;
friend void protobuf_AddDesc_gltrace_2eproto();
friend void protobuf_AssignDesc_gltrace_2eproto();
friend void protobuf_ShutdownFile_gltrace_2eproto();
- ::google::protobuf::uint32 _has_bits_[(7 + 31) / 32];
+ ::google::protobuf::uint32 _has_bits_[(8 + 31) / 32];
// WHY DOES & HAVE LOWER PRECEDENCE THAN != !?
inline bool _has_bit(int index) const {
@@ -1860,6 +1868,22 @@
return fb_;
}
+// optional int32 threadtime = 8;
+inline bool GLMessage::has_threadtime() const {
+ return _has_bit(7);
+}
+inline void GLMessage::clear_threadtime() {
+ threadtime_ = 0;
+ _clear_bit(7);
+}
+inline ::google::protobuf::int32 GLMessage::threadtime() const {
+ return threadtime_;
+}
+inline void GLMessage::set_threadtime(::google::protobuf::int32 value) {
+ _set_bit(7);
+ threadtime_ = value;
+}
+
// @@protoc_insertion_point(namespace_scope)
diff --git a/opengl/libs/GLES_trace/src/gltrace_api.cpp b/opengl/libs/GLES_trace/src/gltrace_api.cpp
index a2366ac..358bf54 100644
--- a/opengl/libs/GLES_trace/src/gltrace_api.cpp
+++ b/opengl/libs/GLES_trace/src/gltrace_api.cpp
@@ -43,11 +43,15 @@
arg_texture->add_intvalue((int)texture);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glActiveTexture(texture);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -70,11 +74,15 @@
arg_shader->add_intvalue(shader);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glAttachShader(program, shader);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -103,11 +111,15 @@
arg_name->add_intvalue((int)name);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBindAttribLocation(program, index, name);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -130,11 +142,15 @@
arg_buffer->add_intvalue(buffer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBindBuffer(target, buffer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -157,11 +173,15 @@
arg_framebuffer->add_intvalue(framebuffer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBindFramebuffer(target, framebuffer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -184,11 +204,15 @@
arg_renderbuffer->add_intvalue(renderbuffer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBindRenderbuffer(target, renderbuffer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -211,11 +235,15 @@
arg_texture->add_intvalue(texture);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBindTexture(target, texture);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -250,11 +278,15 @@
arg_alpha->add_floatvalue(alpha);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBlendColor(red, green, blue, alpha);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -271,11 +303,15 @@
arg_mode->add_intvalue((int)mode);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBlendEquation(mode);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -298,11 +334,15 @@
arg_modeAlpha->add_intvalue((int)modeAlpha);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBlendEquationSeparate(modeRGB, modeAlpha);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -325,11 +365,15 @@
arg_dfactor->add_intvalue((int)dfactor);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBlendFunc(sfactor, dfactor);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -364,11 +408,15 @@
arg_dstAlpha->add_intvalue((int)dstAlpha);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -403,11 +451,15 @@
arg_usage->add_intvalue((int)usage);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBufferData(target, size, data, usage);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -442,11 +494,15 @@
arg_data->add_intvalue((int)data);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBufferSubData(target, offset, size, data);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -463,9 +519,11 @@
arg_target->add_intvalue((int)target);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLenum retValue = glContext->hooks->gl.glCheckFramebufferStatus(target);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -473,7 +531,9 @@
rt->set_type(GLMessage::DataType::ENUM);
rt->add_intvalue((int)retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -492,11 +552,15 @@
arg_mask->add_intvalue(mask);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClear(mask);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -531,11 +595,15 @@
arg_alpha->add_floatvalue(alpha);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClearColor(red, green, blue, alpha);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -552,11 +620,15 @@
arg_depth->add_floatvalue(depth);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClearDepthf(depth);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -573,11 +645,15 @@
arg_s->add_intvalue(s);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClearStencil(s);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -612,11 +688,15 @@
arg_alpha->add_boolvalue(alpha);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glColorMask(red, green, blue, alpha);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -633,11 +713,15 @@
arg_shader->add_intvalue(shader);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glCompileShader(shader);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -696,11 +780,15 @@
arg_data->add_intvalue((int)data);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -765,11 +853,15 @@
arg_data->add_intvalue((int)data);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -828,11 +920,15 @@
arg_border->add_intvalue(border);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -891,11 +987,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -906,9 +1006,11 @@
glmsg.set_function(GLMessage::glCreateProgram);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLuint retValue = glContext->hooks->gl.glCreateProgram();
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -916,7 +1018,9 @@
rt->set_type(GLMessage::DataType::INT);
rt->add_intvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -935,9 +1039,11 @@
arg_type->add_intvalue((int)type);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLuint retValue = glContext->hooks->gl.glCreateShader(type);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -945,7 +1051,9 @@
rt->set_type(GLMessage::DataType::INT);
rt->add_intvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -964,11 +1072,15 @@
arg_mode->add_intvalue((int)mode);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glCullFace(mode);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -991,11 +1103,15 @@
arg_buffers->add_intvalue((int)buffers);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDeleteBuffers(n, buffers);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1018,11 +1134,15 @@
arg_framebuffers->add_intvalue((int)framebuffers);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDeleteFramebuffers(n, framebuffers);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1039,11 +1159,15 @@
arg_program->add_intvalue(program);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDeleteProgram(program);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1066,11 +1190,15 @@
arg_renderbuffers->add_intvalue((int)renderbuffers);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDeleteRenderbuffers(n, renderbuffers);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1087,11 +1215,15 @@
arg_shader->add_intvalue(shader);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDeleteShader(shader);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1114,11 +1246,15 @@
arg_textures->add_intvalue((int)textures);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDeleteTextures(n, textures);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1135,11 +1271,15 @@
arg_func->add_intvalue((int)func);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDepthFunc(func);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1156,11 +1296,15 @@
arg_flag->add_boolvalue(flag);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDepthMask(flag);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1183,11 +1327,15 @@
arg_zFar->add_floatvalue(zFar);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDepthRangef(zNear, zFar);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1210,11 +1358,15 @@
arg_shader->add_intvalue(shader);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDetachShader(program, shader);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1231,11 +1383,15 @@
arg_cap->add_intvalue((int)cap);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDisable(cap);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1252,11 +1408,15 @@
arg_index->add_intvalue(index);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDisableVertexAttribArray(index);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1285,11 +1445,15 @@
arg_count->add_intvalue(count);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDrawArrays(mode, first, count);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1324,11 +1488,15 @@
arg_indices->add_intvalue((int)indices);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDrawElements(mode, count, type, indices);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1345,11 +1513,15 @@
arg_cap->add_intvalue((int)cap);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glEnable(cap);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1366,11 +1538,15 @@
arg_index->add_intvalue(index);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glEnableVertexAttribArray(index);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1381,11 +1557,15 @@
glmsg.set_function(GLMessage::glFinish);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFinish();
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1396,11 +1576,15 @@
glmsg.set_function(GLMessage::glFlush);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFlush();
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1435,11 +1619,15 @@
arg_renderbuffer->add_intvalue(renderbuffer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1480,11 +1668,15 @@
arg_level->add_intvalue(level);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFramebufferTexture2D(target, attachment, textarget, texture, level);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1501,11 +1693,15 @@
arg_mode->add_intvalue((int)mode);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFrontFace(mode);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1528,11 +1724,15 @@
arg_buffers->add_intvalue((int)buffers);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGenBuffers(n, buffers);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1549,11 +1749,15 @@
arg_target->add_intvalue((int)target);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGenerateMipmap(target);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1576,11 +1780,15 @@
arg_framebuffers->add_intvalue((int)framebuffers);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGenFramebuffers(n, framebuffers);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1603,11 +1811,15 @@
arg_renderbuffers->add_intvalue((int)renderbuffers);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGenRenderbuffers(n, renderbuffers);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1630,11 +1842,15 @@
arg_textures->add_intvalue((int)textures);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGenTextures(n, textures);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1687,11 +1903,15 @@
arg_name->add_intvalue((int)name);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetActiveAttrib(program, index, bufsize, length, size, type, name);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1744,11 +1964,15 @@
arg_name->add_intvalue((int)name);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetActiveUniform(program, index, bufsize, length, size, type, name);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1783,11 +2007,15 @@
arg_shaders->add_intvalue((int)shaders);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetAttachedShaders(program, maxcount, count, shaders);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1810,9 +2038,11 @@
arg_name->add_intvalue((int)name);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
int retValue = glContext->hooks->gl.glGetAttribLocation(program, name);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -1820,7 +2050,9 @@
rt->set_type(GLMessage::DataType::INT);
rt->add_intvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -1845,11 +2077,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetBooleanv(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1878,11 +2114,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetBufferParameteriv(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1893,9 +2133,11 @@
glmsg.set_function(GLMessage::glGetError);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLenum retValue = glContext->hooks->gl.glGetError();
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -1903,7 +2145,9 @@
rt->set_type(GLMessage::DataType::ENUM);
rt->add_intvalue((int)retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -1928,11 +2172,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetFloatv(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1967,11 +2215,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -1994,11 +2246,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetIntegerv(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2027,11 +2283,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetProgramiv(program, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2066,11 +2326,15 @@
arg_infolog->add_intvalue((int)infolog);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetProgramInfoLog(program, bufsize, length, infolog);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2099,11 +2363,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetRenderbufferParameteriv(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2132,11 +2400,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetShaderiv(shader, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2171,11 +2443,15 @@
arg_infolog->add_intvalue((int)infolog);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetShaderInfoLog(shader, bufsize, length, infolog);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2210,11 +2486,15 @@
arg_precision->add_intvalue((int)precision);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2249,11 +2529,15 @@
arg_source->add_intvalue((int)source);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetShaderSource(shader, bufsize, length, source);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2270,9 +2554,11 @@
arg_name->add_intvalue((int)name);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
const GLubyte* retValue = glContext->hooks->gl.glGetString(name);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -2280,7 +2566,9 @@
rt->set_type(GLMessage::DataType::INT);
rt->add_intvalue((int)retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -2311,11 +2599,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetTexParameterfv(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2344,11 +2636,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetTexParameteriv(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2377,11 +2673,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetUniformfv(program, location, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2410,11 +2710,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetUniformiv(program, location, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2437,9 +2741,11 @@
arg_name->add_intvalue((int)name);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
int retValue = glContext->hooks->gl.glGetUniformLocation(program, name);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -2447,7 +2753,9 @@
rt->set_type(GLMessage::DataType::INT);
rt->add_intvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -2478,11 +2786,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetVertexAttribfv(index, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2511,11 +2823,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetVertexAttribiv(index, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2544,11 +2860,15 @@
arg_pointer->add_intvalue((int)pointer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetVertexAttribPointerv(index, pname, pointer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2571,11 +2891,15 @@
arg_mode->add_intvalue((int)mode);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glHint(target, mode);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2592,9 +2916,11 @@
arg_buffer->add_intvalue(buffer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glIsBuffer(buffer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -2602,7 +2928,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -2621,9 +2949,11 @@
arg_cap->add_intvalue((int)cap);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glIsEnabled(cap);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -2631,7 +2961,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -2650,9 +2982,11 @@
arg_framebuffer->add_intvalue(framebuffer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glIsFramebuffer(framebuffer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -2660,7 +2994,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -2679,9 +3015,11 @@
arg_program->add_intvalue(program);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glIsProgram(program);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -2689,7 +3027,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -2708,9 +3048,11 @@
arg_renderbuffer->add_intvalue(renderbuffer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glIsRenderbuffer(renderbuffer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -2718,7 +3060,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -2737,9 +3081,11 @@
arg_shader->add_intvalue(shader);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glIsShader(shader);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -2747,7 +3093,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -2766,9 +3114,11 @@
arg_texture->add_intvalue(texture);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glIsTexture(texture);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -2776,7 +3126,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -2795,11 +3147,15 @@
arg_width->add_floatvalue(width);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLineWidth(width);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2816,11 +3172,15 @@
arg_program->add_intvalue(program);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLinkProgram(program);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2843,11 +3203,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPixelStorei(pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2870,11 +3234,15 @@
arg_units->add_floatvalue(units);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPolygonOffset(factor, units);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2927,11 +3295,15 @@
arg_pixels->add_intvalue((int)pixels);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glReadPixels(x, y, width, height, format, type, pixels);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2942,11 +3314,15 @@
glmsg.set_function(GLMessage::glReleaseShaderCompiler);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glReleaseShaderCompiler();
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -2981,11 +3357,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glRenderbufferStorage(target, internalformat, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3008,11 +3388,15 @@
arg_invert->add_boolvalue(invert);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glSampleCoverage(value, invert);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3047,11 +3431,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glScissor(x, y, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3092,11 +3480,15 @@
arg_length->add_intvalue(length);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glShaderBinary(n, shaders, binaryformat, binary, length);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3131,11 +3523,15 @@
arg_length->add_intvalue((int)length);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glShaderSource(shader, count, string, length);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3164,11 +3560,15 @@
arg_mask->add_intvalue(mask);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glStencilFunc(func, ref, mask);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3203,11 +3603,15 @@
arg_mask->add_intvalue(mask);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glStencilFuncSeparate(face, func, ref, mask);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3224,11 +3628,15 @@
arg_mask->add_intvalue(mask);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glStencilMask(mask);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3251,11 +3659,15 @@
arg_mask->add_intvalue(mask);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glStencilMaskSeparate(face, mask);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3284,11 +3696,15 @@
arg_zpass->add_intvalue((int)zpass);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glStencilOp(fail, zfail, zpass);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3323,11 +3739,15 @@
arg_zpass->add_intvalue((int)zpass);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glStencilOpSeparate(face, fail, zfail, zpass);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3392,11 +3812,15 @@
arg_pixels->add_intvalue((int)pixels);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3425,11 +3849,15 @@
arg_param->add_floatvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexParameterf(target, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3458,11 +3886,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexParameterfv(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3491,11 +3923,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexParameteri(target, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3524,11 +3960,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexParameteriv(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3593,11 +4033,15 @@
arg_pixels->add_intvalue((int)pixels);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3620,11 +4064,15 @@
arg_x->add_floatvalue(x);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform1f(location, x);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3653,11 +4101,15 @@
arg_v->add_intvalue((int)v);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform1fv(location, count, v);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3680,11 +4132,15 @@
arg_x->add_intvalue(x);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform1i(location, x);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3713,11 +4169,15 @@
arg_v->add_intvalue((int)v);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform1iv(location, count, v);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3746,11 +4206,15 @@
arg_y->add_floatvalue(y);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform2f(location, x, y);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3779,11 +4243,15 @@
arg_v->add_intvalue((int)v);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform2fv(location, count, v);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3812,11 +4280,15 @@
arg_y->add_intvalue(y);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform2i(location, x, y);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3845,11 +4317,15 @@
arg_v->add_intvalue((int)v);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform2iv(location, count, v);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3884,11 +4360,15 @@
arg_z->add_floatvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform3f(location, x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3917,11 +4397,15 @@
arg_v->add_intvalue((int)v);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform3fv(location, count, v);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3956,11 +4440,15 @@
arg_z->add_intvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform3i(location, x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -3989,11 +4477,15 @@
arg_v->add_intvalue((int)v);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform3iv(location, count, v);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4034,11 +4526,15 @@
arg_w->add_floatvalue(w);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform4f(location, x, y, z, w);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4067,11 +4563,15 @@
arg_v->add_intvalue((int)v);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform4fv(location, count, v);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4112,11 +4612,15 @@
arg_w->add_intvalue(w);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform4i(location, x, y, z, w);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4145,11 +4649,15 @@
arg_v->add_intvalue((int)v);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniform4iv(location, count, v);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4184,11 +4692,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniformMatrix2fv(location, count, transpose, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4223,11 +4735,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniformMatrix3fv(location, count, transpose, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4262,11 +4778,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUniformMatrix4fv(location, count, transpose, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4283,11 +4803,15 @@
arg_program->add_intvalue(program);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUseProgram(program);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4304,11 +4828,15 @@
arg_program->add_intvalue(program);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glValidateProgram(program);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4331,11 +4859,15 @@
arg_x->add_floatvalue(x);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glVertexAttrib1f(indx, x);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4358,11 +4890,15 @@
arg_values->add_intvalue((int)values);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glVertexAttrib1fv(indx, values);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4391,11 +4927,15 @@
arg_y->add_floatvalue(y);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glVertexAttrib2f(indx, x, y);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4418,11 +4958,15 @@
arg_values->add_intvalue((int)values);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glVertexAttrib2fv(indx, values);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4457,11 +5001,15 @@
arg_z->add_floatvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glVertexAttrib3f(indx, x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4484,11 +5032,15 @@
arg_values->add_intvalue((int)values);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glVertexAttrib3fv(indx, values);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4529,11 +5081,15 @@
arg_w->add_floatvalue(w);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glVertexAttrib4f(indx, x, y, z, w);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4556,11 +5112,15 @@
arg_values->add_intvalue((int)values);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glVertexAttrib4fv(indx, values);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4607,11 +5167,15 @@
arg_ptr->add_intvalue((int)ptr);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glVertexAttribPointer(indx, size, type, normalized, stride, ptr);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4646,11 +5210,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glViewport(x, y, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4676,11 +5244,15 @@
arg_image->add_intvalue((int)image);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glEGLImageTargetTexture2DOES(target, image);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4703,11 +5275,15 @@
arg_image->add_intvalue((int)image);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glEGLImageTargetRenderbufferStorageOES(target, image);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4748,11 +5324,15 @@
arg_binary->add_intvalue((int)binary);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetProgramBinaryOES(program, bufSize, length, binaryFormat, binary);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4787,11 +5367,15 @@
arg_length->add_intvalue(length);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramBinaryOES(program, binaryFormat, binary, length);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4814,9 +5398,11 @@
arg_access->add_intvalue((int)access);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
void* retValue = glContext->hooks->gl.glMapBufferOES(target, access);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -4824,7 +5410,9 @@
rt->set_type(GLMessage::DataType::INT);
rt->add_intvalue((int)retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -4843,9 +5431,11 @@
arg_target->add_intvalue((int)target);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glUnmapBufferOES(target);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -4853,7 +5443,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -4884,11 +5476,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetBufferPointervOES(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -4959,11 +5555,15 @@
arg_pixels->add_intvalue((int)pixels);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexImage3DOES(target, level, internalformat, width, height, depth, border, format, type, pixels);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5040,11 +5640,15 @@
arg_pixels->add_intvalue((int)pixels);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5109,11 +5713,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glCopyTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, x, y, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5178,11 +5786,15 @@
arg_data->add_intvalue((int)data);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glCompressedTexImage3DOES(target, level, internalformat, width, height, depth, border, imageSize, data);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5259,11 +5871,15 @@
arg_data->add_intvalue((int)data);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glCompressedTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5310,11 +5926,15 @@
arg_zoffset->add_intvalue(zoffset);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFramebufferTexture3DOES(target, attachment, textarget, texture, level, zoffset);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5331,11 +5951,15 @@
arg_array->add_intvalue(array);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBindVertexArrayOES(array);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5358,11 +5982,15 @@
arg_arrays->add_intvalue((int)arrays);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDeleteVertexArraysOES(n, arrays);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5385,11 +6013,15 @@
arg_arrays->add_intvalue((int)arrays);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGenVertexArraysOES(n, arrays);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5406,9 +6038,11 @@
arg_array->add_intvalue(array);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glIsVertexArrayOES(array);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -5416,7 +6050,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -5447,11 +6083,15 @@
arg_groups->add_intvalue((int)groups);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetPerfMonitorGroupsAMD(numGroups, groupsSize, groups);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5492,11 +6132,15 @@
arg_counters->add_intvalue((int)counters);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetPerfMonitorCountersAMD(group, numCounters, maxActiveCounters, counterSize, counters);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5531,11 +6175,15 @@
arg_groupString->add_intvalue((int)groupString);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetPerfMonitorGroupStringAMD(group, bufSize, length, groupString);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5576,11 +6224,15 @@
arg_counterString->add_intvalue((int)counterString);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetPerfMonitorCounterStringAMD(group, counter, bufSize, length, counterString);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5615,11 +6267,15 @@
arg_data->add_intvalue((int)data);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetPerfMonitorCounterInfoAMD(group, counter, pname, data);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5642,11 +6298,15 @@
arg_monitors->add_intvalue((int)monitors);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGenPerfMonitorsAMD(n, monitors);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5669,11 +6329,15 @@
arg_monitors->add_intvalue((int)monitors);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDeletePerfMonitorsAMD(n, monitors);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5714,11 +6378,15 @@
arg_countersList->add_intvalue((int)countersList);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glSelectPerfMonitorCountersAMD(monitor, enable, group, numCounters, countersList);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5735,11 +6403,15 @@
arg_monitor->add_intvalue(monitor);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBeginPerfMonitorAMD(monitor);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5756,11 +6428,15 @@
arg_monitor->add_intvalue(monitor);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glEndPerfMonitorAMD(monitor);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5801,11 +6477,15 @@
arg_bytesWritten->add_intvalue((int)bytesWritten);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetPerfMonitorCounterDataAMD(monitor, pname, dataSize, data, bytesWritten);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5876,11 +6556,15 @@
arg_filter->add_intvalue((int)filter);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBlitFramebufferANGLE(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5921,11 +6605,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glRenderbufferStorageMultisampleANGLE(target, samples, internalformat, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5966,11 +6654,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glRenderbufferStorageMultisampleAPPLE(target, samples, internalformat, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -5981,11 +6673,15 @@
glmsg.set_function(GLMessage::glResolveMultisampleFramebufferAPPLE);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glResolveMultisampleFramebufferAPPLE();
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6020,11 +6716,15 @@
arg_label->add_intvalue((int)label);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLabelObjectEXT(type, object, length, label);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6065,11 +6765,15 @@
arg_label->add_intvalue((int)label);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetObjectLabelEXT(type, object, bufSize, length, label);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6092,11 +6796,15 @@
arg_marker->add_intvalue((int)marker);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glInsertEventMarkerEXT(length, marker);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6119,11 +6827,15 @@
arg_marker->add_intvalue((int)marker);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPushGroupMarkerEXT(length, marker);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6134,11 +6846,15 @@
glmsg.set_function(GLMessage::glPopGroupMarkerEXT);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPopGroupMarkerEXT();
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6167,11 +6883,15 @@
arg_attachments->add_intvalue((int)attachments);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDiscardFramebufferEXT(target, numAttachments, attachments);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6212,11 +6932,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glRenderbufferStorageMultisampleEXT(target, samples, internalformat, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6263,11 +6987,15 @@
arg_samples->add_intvalue(samples);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFramebufferTexture2DMultisampleEXT(target, attachment, textarget, texture, level, samples);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6302,11 +7030,15 @@
arg_primcount->add_intvalue(primcount);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMultiDrawArraysEXT(mode, first, count, primcount);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6347,11 +7079,15 @@
arg_primcount->add_intvalue(primcount);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMultiDrawElementsEXT(mode, count, type, indices, primcount);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6374,11 +7110,15 @@
arg_ids->add_intvalue((int)ids);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGenQueriesEXT(n, ids);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6401,11 +7141,15 @@
arg_ids->add_intvalue((int)ids);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDeleteQueriesEXT(n, ids);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6422,9 +7166,11 @@
arg_id->add_intvalue(id);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glIsQueryEXT(id);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -6432,7 +7178,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -6457,11 +7205,15 @@
arg_id->add_intvalue(id);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBeginQueryEXT(target, id);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6478,11 +7230,15 @@
arg_target->add_intvalue((int)target);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glEndQueryEXT(target);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6511,11 +7267,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetQueryivEXT(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6544,11 +7304,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetQueryObjectuivEXT(id, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6559,9 +7323,11 @@
glmsg.set_function(GLMessage::glGetGraphicsResetStatusEXT);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLenum retValue = glContext->hooks->gl.glGetGraphicsResetStatusEXT();
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -6569,7 +7335,9 @@
rt->set_type(GLMessage::DataType::ENUM);
rt->add_intvalue((int)retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -6630,11 +7398,15 @@
arg_data->add_intvalue((int)data);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glReadnPixelsEXT(x, y, width, height, format, type, bufSize, data);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6669,11 +7441,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetnUniformfvEXT(program, location, bufSize, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6708,11 +7484,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetnUniformivEXT(program, location, bufSize, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6741,11 +7521,15 @@
arg_program->add_intvalue(program);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glUseProgramStagesEXT(pipeline, stages, program);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6768,11 +7552,15 @@
arg_program->add_intvalue(program);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glActiveShaderProgramEXT(pipeline, program);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6801,9 +7589,11 @@
arg_strings->add_intvalue((int)strings);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLuint retValue = glContext->hooks->gl.glCreateShaderProgramvEXT(type, count, strings);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -6811,7 +7601,9 @@
rt->set_type(GLMessage::DataType::INT);
rt->add_intvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -6830,11 +7622,15 @@
arg_pipeline->add_intvalue(pipeline);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBindProgramPipelineEXT(pipeline);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6857,11 +7653,15 @@
arg_pipelines->add_intvalue((int)pipelines);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDeleteProgramPipelinesEXT(n, pipelines);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6884,11 +7684,15 @@
arg_pipelines->add_intvalue((int)pipelines);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGenProgramPipelinesEXT(n, pipelines);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6905,9 +7709,11 @@
arg_pipeline->add_intvalue(pipeline);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glIsProgramPipelineEXT(pipeline);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -6915,7 +7721,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -6946,11 +7754,15 @@
arg_value->add_intvalue(value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramParameteriEXT(program, pname, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -6979,11 +7791,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetProgramPipelineivEXT(pipeline, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7012,11 +7828,15 @@
arg_x->add_intvalue(x);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform1iEXT(program, location, x);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7051,11 +7871,15 @@
arg_y->add_intvalue(y);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform2iEXT(program, location, x, y);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7096,11 +7920,15 @@
arg_z->add_intvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform3iEXT(program, location, x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7147,11 +7975,15 @@
arg_w->add_intvalue(w);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform4iEXT(program, location, x, y, z, w);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7180,11 +8012,15 @@
arg_x->add_floatvalue(x);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform1fEXT(program, location, x);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7219,11 +8055,15 @@
arg_y->add_floatvalue(y);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform2fEXT(program, location, x, y);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7264,11 +8104,15 @@
arg_z->add_floatvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform3fEXT(program, location, x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7315,11 +8159,15 @@
arg_w->add_floatvalue(w);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform4fEXT(program, location, x, y, z, w);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7354,11 +8202,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform1ivEXT(program, location, count, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7393,11 +8245,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform2ivEXT(program, location, count, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7432,11 +8288,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform3ivEXT(program, location, count, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7471,11 +8331,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform4ivEXT(program, location, count, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7510,11 +8374,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform1fvEXT(program, location, count, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7549,11 +8417,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform2fvEXT(program, location, count, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7588,11 +8460,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform3fvEXT(program, location, count, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7627,11 +8503,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniform4fvEXT(program, location, count, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7672,11 +8552,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniformMatrix2fvEXT(program, location, count, transpose, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7717,11 +8601,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniformMatrix3fvEXT(program, location, count, transpose, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7762,11 +8650,15 @@
arg_value->add_intvalue((int)value);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glProgramUniformMatrix4fvEXT(program, location, count, transpose, value);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7783,11 +8675,15 @@
arg_pipeline->add_intvalue(pipeline);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glValidateProgramPipelineEXT(pipeline);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7822,11 +8718,15 @@
arg_infoLog->add_intvalue((int)infoLog);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetProgramPipelineInfoLogEXT(pipeline, bufSize, length, infoLog);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7861,11 +8761,15 @@
arg_width->add_intvalue(width);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexStorage1DEXT(target, levels, internalformat, width);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7906,11 +8810,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexStorage2DEXT(target, levels, internalformat, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -7957,11 +8865,15 @@
arg_depth->add_intvalue(depth);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexStorage3DEXT(target, levels, internalformat, width, height, depth);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8002,11 +8914,15 @@
arg_width->add_intvalue(width);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTextureStorage1DEXT(texture, target, levels, internalformat, width);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8053,11 +8969,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTextureStorage2DEXT(texture, target, levels, internalformat, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8110,11 +9030,15 @@
arg_depth->add_intvalue(depth);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTextureStorage3DEXT(texture, target, levels, internalformat, width, height, depth);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8155,11 +9079,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glRenderbufferStorageMultisampleIMG(target, samples, internalformat, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8206,11 +9134,15 @@
arg_samples->add_intvalue(samples);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFramebufferTexture2DMultisampleIMG(target, attachment, textarget, texture, level, samples);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8227,11 +9159,15 @@
arg_mask->add_boolvalue(mask);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glCoverageMaskNV(mask);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8248,11 +9184,15 @@
arg_operation->add_intvalue((int)operation);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glCoverageOperationNV(operation);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8275,11 +9215,15 @@
arg_bufs->add_intvalue((int)bufs);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDrawBuffersNV(n, bufs);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8302,11 +9246,15 @@
arg_fences->add_intvalue((int)fences);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDeleteFencesNV(n, fences);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8329,11 +9277,15 @@
arg_fences->add_intvalue((int)fences);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGenFencesNV(n, fences);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8350,9 +9302,11 @@
arg_fence->add_intvalue(fence);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glIsFenceNV(fence);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -8360,7 +9314,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -8379,9 +9335,11 @@
arg_fence->add_intvalue(fence);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glTestFenceNV(fence);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -8389,7 +9347,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -8420,11 +9380,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetFenceivNV(fence, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8441,11 +9405,15 @@
arg_fence->add_intvalue(fence);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFinishFenceNV(fence);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8468,11 +9436,15 @@
arg_condition->add_intvalue((int)condition);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glSetFenceNV(fence, condition);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8489,11 +9461,15 @@
arg_mode->add_intvalue((int)mode);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glReadBufferNV(mode);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8516,11 +9492,15 @@
arg_ref->add_floatvalue(ref);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glAlphaFuncQCOM(func, ref);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8549,11 +9529,15 @@
arg_driverControls->add_intvalue((int)driverControls);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetDriverControlsQCOM(num, size, driverControls);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8588,11 +9572,15 @@
arg_driverControlString->add_intvalue((int)driverControlString);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetDriverControlStringQCOM(driverControl, bufSize, length, driverControlString);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8609,11 +9597,15 @@
arg_driverControl->add_intvalue(driverControl);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glEnableDriverControlQCOM(driverControl);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8630,11 +9622,15 @@
arg_driverControl->add_intvalue(driverControl);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDisableDriverControlQCOM(driverControl);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8663,11 +9659,15 @@
arg_numTextures->add_intvalue((int)numTextures);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glExtGetTexturesQCOM(textures, maxTextures, numTextures);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8696,11 +9696,15 @@
arg_numBuffers->add_intvalue((int)numBuffers);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glExtGetBuffersQCOM(buffers, maxBuffers, numBuffers);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8729,11 +9733,15 @@
arg_numRenderbuffers->add_intvalue((int)numRenderbuffers);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glExtGetRenderbuffersQCOM(renderbuffers, maxRenderbuffers, numRenderbuffers);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8762,11 +9770,15 @@
arg_numFramebuffers->add_intvalue((int)numFramebuffers);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glExtGetFramebuffersQCOM(framebuffers, maxFramebuffers, numFramebuffers);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8807,11 +9819,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glExtGetTexLevelParameterivQCOM(texture, face, level, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8840,11 +9856,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glExtTexObjectStateOverrideiQCOM(target, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8921,11 +9941,15 @@
arg_texels->add_intvalue((int)texels);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glExtGetTexSubImageQCOM(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texels);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8948,11 +9972,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glExtGetBufferPointervQCOM(target, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -8981,11 +10009,15 @@
arg_numShaders->add_intvalue((int)numShaders);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glExtGetShadersQCOM(shaders, maxShaders, numShaders);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9014,11 +10046,15 @@
arg_numPrograms->add_intvalue((int)numPrograms);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glExtGetProgramsQCOM(programs, maxPrograms, numPrograms);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9035,9 +10071,11 @@
arg_program->add_intvalue(program);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glExtIsProgramBinaryQCOM(program);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -9045,7 +10083,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -9082,11 +10122,15 @@
arg_length->add_intvalue((int)length);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glExtGetProgramBinarySourceQCOM(program, shadertype, source, length);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9127,11 +10171,15 @@
arg_preserveMask->add_intvalue(preserveMask);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glStartTilingQCOM(x, y, width, height, preserveMask);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9148,11 +10196,15 @@
arg_preserveMask->add_intvalue(preserveMask);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glEndTilingQCOM(preserveMask);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9178,11 +10230,15 @@
arg_ref->add_floatvalue(ref);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glAlphaFunc(func, ref);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9205,11 +10261,15 @@
arg_equation->add_intvalue((int)equation);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClipPlanef(plane, equation);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9244,11 +10304,15 @@
arg_alpha->add_floatvalue(alpha);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glColor4f(red, green, blue, alpha);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9271,11 +10335,15 @@
arg_param->add_floatvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFogf(pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9298,11 +10366,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFogfv(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9349,11 +10421,15 @@
arg_zFar->add_floatvalue(zFar);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFrustumf(left, right, bottom, top, zNear, zFar);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9376,11 +10452,15 @@
arg_eqn->add_intvalue((int)eqn);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetClipPlanef(pname, eqn);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9409,11 +10489,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetLightfv(light, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9442,11 +10526,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetMaterialfv(face, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9475,11 +10563,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetTexEnvfv(env, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9502,11 +10594,15 @@
arg_param->add_floatvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLightModelf(pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9529,11 +10625,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLightModelfv(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9562,11 +10662,15 @@
arg_param->add_floatvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLightf(light, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9595,11 +10699,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLightfv(light, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9616,11 +10724,15 @@
arg_m->add_intvalue((int)m);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLoadMatrixf(m);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9649,11 +10761,15 @@
arg_param->add_floatvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMaterialf(face, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9682,11 +10798,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMaterialfv(face, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9703,11 +10823,15 @@
arg_m->add_intvalue((int)m);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMultMatrixf(m);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9748,11 +10872,15 @@
arg_q->add_floatvalue(q);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMultiTexCoord4f(target, s, t, r, q);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9781,11 +10909,15 @@
arg_nz->add_floatvalue(nz);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glNormal3f(nx, ny, nz);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9832,11 +10964,15 @@
arg_zFar->add_floatvalue(zFar);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glOrthof(left, right, bottom, top, zNear, zFar);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9859,11 +10995,15 @@
arg_param->add_floatvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPointParameterf(pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9886,11 +11026,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPointParameterfv(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9907,11 +11051,15 @@
arg_size->add_floatvalue(size);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPointSize(size);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9946,11 +11094,15 @@
arg_z->add_floatvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glRotatef(angle, x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -9979,11 +11131,15 @@
arg_z->add_floatvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glScalef(x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10012,11 +11168,15 @@
arg_param->add_floatvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexEnvf(target, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10045,11 +11205,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexEnvfv(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10078,11 +11242,15 @@
arg_z->add_floatvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTranslatef(x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10105,11 +11273,15 @@
arg_ref->add_intvalue(ref);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glAlphaFuncx(func, ref);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10144,11 +11316,15 @@
arg_alpha->add_intvalue(alpha);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClearColorx(red, green, blue, alpha);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10165,11 +11341,15 @@
arg_depth->add_intvalue(depth);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClearDepthx(depth);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10186,11 +11366,15 @@
arg_texture->add_intvalue((int)texture);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClientActiveTexture(texture);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10213,11 +11397,15 @@
arg_equation->add_intvalue((int)equation);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClipPlanex(plane, equation);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10252,11 +11440,15 @@
arg_alpha->add_intvalue((int)alpha);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glColor4ub(red, green, blue, alpha);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10291,11 +11483,15 @@
arg_alpha->add_intvalue(alpha);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glColor4x(red, green, blue, alpha);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10330,11 +11526,15 @@
arg_pointer->add_intvalue((int)pointer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glColorPointer(size, type, stride, pointer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10357,11 +11557,15 @@
arg_zFar->add_intvalue(zFar);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDepthRangex(zNear, zFar);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10378,11 +11582,15 @@
arg_array->add_intvalue((int)array);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDisableClientState(array);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10399,11 +11607,15 @@
arg_array->add_intvalue((int)array);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glEnableClientState(array);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10426,11 +11638,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFogx(pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10453,11 +11669,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFogxv(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10504,11 +11724,15 @@
arg_zFar->add_intvalue(zFar);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFrustumx(left, right, bottom, top, zNear, zFar);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10531,11 +11755,15 @@
arg_eqn->add_intvalue((int)eqn);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetClipPlanex(pname, eqn);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10558,11 +11786,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetFixedv(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10591,11 +11823,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetLightxv(light, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10624,11 +11860,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetMaterialxv(face, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10651,11 +11891,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetPointerv(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10684,11 +11928,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetTexEnviv(env, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10717,11 +11965,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetTexEnvxv(env, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10750,11 +12002,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetTexParameterxv(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10777,11 +12033,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLightModelx(pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10804,11 +12064,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLightModelxv(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10837,11 +12101,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLightx(light, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10870,11 +12138,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLightxv(light, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10891,11 +12163,15 @@
arg_width->add_intvalue(width);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLineWidthx(width);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10906,11 +12182,15 @@
glmsg.set_function(GLMessage::glLoadIdentity);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLoadIdentity();
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10927,11 +12207,15 @@
arg_m->add_intvalue((int)m);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLoadMatrixx(m);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10948,11 +12232,15 @@
arg_opcode->add_intvalue((int)opcode);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLogicOp(opcode);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -10981,11 +12269,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMaterialx(face, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11014,11 +12306,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMaterialxv(face, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11035,11 +12331,15 @@
arg_mode->add_intvalue((int)mode);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMatrixMode(mode);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11056,11 +12356,15 @@
arg_m->add_intvalue((int)m);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMultMatrixx(m);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11101,11 +12405,15 @@
arg_q->add_intvalue(q);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMultiTexCoord4x(target, s, t, r, q);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11134,11 +12442,15 @@
arg_nz->add_intvalue(nz);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glNormal3x(nx, ny, nz);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11167,11 +12479,15 @@
arg_pointer->add_intvalue((int)pointer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glNormalPointer(type, stride, pointer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11218,11 +12534,15 @@
arg_zFar->add_intvalue(zFar);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glOrthox(left, right, bottom, top, zNear, zFar);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11245,11 +12565,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPointParameterx(pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11272,11 +12596,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPointParameterxv(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11293,11 +12621,15 @@
arg_size->add_intvalue(size);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPointSizex(size);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11320,11 +12652,15 @@
arg_units->add_intvalue(units);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPolygonOffsetx(factor, units);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11335,11 +12671,15 @@
glmsg.set_function(GLMessage::glPopMatrix);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPopMatrix();
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11350,11 +12690,15 @@
glmsg.set_function(GLMessage::glPushMatrix);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPushMatrix();
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11389,11 +12733,15 @@
arg_z->add_intvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glRotatex(angle, x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11416,11 +12764,15 @@
arg_invert->add_boolvalue(invert);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glSampleCoveragex(value, invert);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11449,11 +12801,15 @@
arg_z->add_intvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glScalex(x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11470,11 +12826,15 @@
arg_mode->add_intvalue((int)mode);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glShadeModel(mode);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11509,11 +12869,15 @@
arg_pointer->add_intvalue((int)pointer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexCoordPointer(size, type, stride, pointer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11542,11 +12906,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexEnvi(target, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11575,11 +12943,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexEnvx(target, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11608,11 +12980,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexEnviv(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11641,11 +13017,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexEnvxv(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11674,11 +13054,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexParameterx(target, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11707,11 +13091,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexParameterxv(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11740,11 +13128,15 @@
arg_z->add_intvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTranslatex(x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11779,11 +13171,15 @@
arg_pointer->add_intvalue((int)pointer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glVertexPointer(size, type, stride, pointer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11812,11 +13208,15 @@
arg_pointer->add_intvalue((int)pointer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPointSizePointerOES(type, stride, pointer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11842,11 +13242,15 @@
arg_modeAlpha->add_intvalue((int)modeAlpha);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBlendEquationSeparateOES(modeRGB, modeAlpha);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11881,11 +13285,15 @@
arg_dstAlpha->add_intvalue((int)dstAlpha);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBlendFuncSeparateOES(srcRGB, dstRGB, srcAlpha, dstAlpha);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11902,11 +13310,15 @@
arg_mode->add_intvalue((int)mode);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBlendEquationOES(mode);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11947,11 +13359,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDrawTexsOES(x, y, z, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -11992,11 +13408,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDrawTexiOES(x, y, z, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12037,11 +13457,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDrawTexxOES(x, y, z, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12058,11 +13482,15 @@
arg_coords->add_intvalue((int)coords);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDrawTexsvOES(coords);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12079,11 +13507,15 @@
arg_coords->add_intvalue((int)coords);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDrawTexivOES(coords);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12100,11 +13532,15 @@
arg_coords->add_intvalue((int)coords);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDrawTexxvOES(coords);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12145,11 +13581,15 @@
arg_height->add_floatvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDrawTexfOES(x, y, z, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12166,11 +13606,15 @@
arg_coords->add_intvalue((int)coords);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDrawTexfvOES(coords);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12193,11 +13637,15 @@
arg_ref->add_intvalue(ref);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glAlphaFuncxOES(func, ref);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12232,11 +13680,15 @@
arg_alpha->add_intvalue(alpha);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClearColorxOES(red, green, blue, alpha);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12253,11 +13705,15 @@
arg_depth->add_intvalue(depth);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClearDepthxOES(depth);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12280,11 +13736,15 @@
arg_equation->add_intvalue((int)equation);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClipPlanexOES(plane, equation);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12319,11 +13779,15 @@
arg_alpha->add_intvalue(alpha);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glColor4xOES(red, green, blue, alpha);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12346,11 +13810,15 @@
arg_zFar->add_intvalue(zFar);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDepthRangexOES(zNear, zFar);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12373,11 +13841,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFogxOES(pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12400,11 +13872,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFogxvOES(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12451,11 +13927,15 @@
arg_zFar->add_intvalue(zFar);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFrustumxOES(left, right, bottom, top, zNear, zFar);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12478,11 +13958,15 @@
arg_eqn->add_intvalue((int)eqn);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetClipPlanexOES(pname, eqn);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12505,11 +13989,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetFixedvOES(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12538,11 +14026,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetLightxvOES(light, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12571,11 +14063,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetMaterialxvOES(face, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12604,11 +14100,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetTexEnvxvOES(env, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12637,11 +14137,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetTexParameterxvOES(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12664,11 +14168,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLightModelxOES(pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12691,11 +14199,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLightModelxvOES(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12724,11 +14236,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLightxOES(light, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12757,11 +14273,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLightxvOES(light, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12778,11 +14298,15 @@
arg_width->add_intvalue(width);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLineWidthxOES(width);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12799,11 +14323,15 @@
arg_m->add_intvalue((int)m);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLoadMatrixxOES(m);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12832,11 +14360,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMaterialxOES(face, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12865,11 +14397,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMaterialxvOES(face, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12886,11 +14422,15 @@
arg_m->add_intvalue((int)m);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMultMatrixxOES(m);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12931,11 +14471,15 @@
arg_q->add_intvalue(q);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMultiTexCoord4xOES(target, s, t, r, q);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -12964,11 +14508,15 @@
arg_nz->add_intvalue(nz);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glNormal3xOES(nx, ny, nz);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13015,11 +14563,15 @@
arg_zFar->add_intvalue(zFar);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glOrthoxOES(left, right, bottom, top, zNear, zFar);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13042,11 +14594,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPointParameterxOES(pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13069,11 +14625,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPointParameterxvOES(pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13090,11 +14650,15 @@
arg_size->add_intvalue(size);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPointSizexOES(size);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13117,11 +14681,15 @@
arg_units->add_intvalue(units);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glPolygonOffsetxOES(factor, units);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13156,11 +14724,15 @@
arg_z->add_intvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glRotatexOES(angle, x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13183,11 +14755,15 @@
arg_invert->add_boolvalue(invert);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glSampleCoveragexOES(value, invert);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13216,11 +14792,15 @@
arg_z->add_intvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glScalexOES(x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13249,11 +14829,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexEnvxOES(target, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13282,11 +14866,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexEnvxvOES(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13315,11 +14903,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexParameterxOES(target, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13348,11 +14940,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexParameterxvOES(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13381,11 +14977,15 @@
arg_z->add_intvalue(z);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTranslatexOES(x, y, z);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13402,9 +15002,11 @@
arg_renderbuffer->add_intvalue(renderbuffer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glIsRenderbufferOES(renderbuffer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -13412,7 +15014,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -13437,11 +15041,15 @@
arg_renderbuffer->add_intvalue(renderbuffer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBindRenderbufferOES(target, renderbuffer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13464,11 +15072,15 @@
arg_renderbuffers->add_intvalue((int)renderbuffers);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDeleteRenderbuffersOES(n, renderbuffers);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13491,11 +15103,15 @@
arg_renderbuffers->add_intvalue((int)renderbuffers);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGenRenderbuffersOES(n, renderbuffers);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13530,11 +15146,15 @@
arg_height->add_intvalue(height);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glRenderbufferStorageOES(target, internalformat, width, height);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13563,11 +15183,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetRenderbufferParameterivOES(target, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13584,9 +15208,11 @@
arg_framebuffer->add_intvalue(framebuffer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLboolean retValue = glContext->hooks->gl.glIsFramebufferOES(framebuffer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -13594,7 +15220,9 @@
rt->set_type(GLMessage::DataType::BOOL);
rt->add_boolvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -13619,11 +15247,15 @@
arg_framebuffer->add_intvalue(framebuffer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glBindFramebufferOES(target, framebuffer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13646,11 +15278,15 @@
arg_framebuffers->add_intvalue((int)framebuffers);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDeleteFramebuffersOES(n, framebuffers);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13673,11 +15309,15 @@
arg_framebuffers->add_intvalue((int)framebuffers);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGenFramebuffersOES(n, framebuffers);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13694,9 +15334,11 @@
arg_target->add_intvalue((int)target);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLenum retValue = glContext->hooks->gl.glCheckFramebufferStatusOES(target);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -13704,7 +15346,9 @@
rt->set_type(GLMessage::DataType::ENUM);
rt->add_intvalue((int)retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -13741,11 +15385,15 @@
arg_renderbuffer->add_intvalue(renderbuffer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFramebufferRenderbufferOES(target, attachment, renderbuffertarget, renderbuffer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13786,11 +15434,15 @@
arg_level->add_intvalue(level);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFramebufferTexture2DOES(target, attachment, textarget, texture, level);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13825,11 +15477,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetFramebufferAttachmentParameterivOES(target, attachment, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13846,11 +15502,15 @@
arg_target->add_intvalue((int)target);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGenerateMipmapOES(target);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13867,11 +15527,15 @@
arg_matrixpaletteindex->add_intvalue(matrixpaletteindex);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glCurrentPaletteMatrixOES(matrixpaletteindex);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13882,11 +15546,15 @@
glmsg.set_function(GLMessage::glLoadPaletteFromModelViewMatrixOES);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glLoadPaletteFromModelViewMatrixOES();
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13921,11 +15589,15 @@
arg_pointer->add_intvalue((int)pointer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glMatrixIndexPointerOES(size, type, stride, pointer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13960,11 +15632,15 @@
arg_pointer->add_intvalue((int)pointer);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glWeightPointerOES(size, type, stride, pointer);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -13987,9 +15663,11 @@
arg_exponent->add_intvalue((int)exponent);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
GLbitfield retValue = glContext->hooks->gl.glQueryMatrixxOES(mantissa, exponent);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
// set return value
GLMessage_DataType *rt = glmsg.mutable_returnvalue();
@@ -13997,7 +15675,9 @@
rt->set_type(GLMessage::DataType::INT);
rt->add_intvalue(retValue);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
return retValue;
@@ -14022,11 +15702,15 @@
arg_zFar->add_floatvalue(zFar);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glDepthRangefOES(zNear, zFar);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14073,11 +15757,15 @@
arg_zFar->add_floatvalue(zFar);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glFrustumfOES(left, right, bottom, top, zNear, zFar);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14124,11 +15812,15 @@
arg_zFar->add_floatvalue(zFar);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glOrthofOES(left, right, bottom, top, zNear, zFar);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14151,11 +15843,15 @@
arg_equation->add_intvalue((int)equation);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClipPlanefOES(plane, equation);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14178,11 +15874,15 @@
arg_eqn->add_intvalue((int)eqn);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetClipPlanefOES(pname, eqn);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14199,11 +15899,15 @@
arg_depth->add_floatvalue(depth);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClearDepthfOES(depth);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14232,11 +15936,15 @@
arg_param->add_floatvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexGenfOES(coord, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14265,11 +15973,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexGenfvOES(coord, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14298,11 +16010,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexGeniOES(coord, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14331,11 +16047,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexGenivOES(coord, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14364,11 +16084,15 @@
arg_param->add_intvalue(param);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexGenxOES(coord, pname, param);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14397,11 +16121,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glTexGenxvOES(coord, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14430,11 +16158,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetTexGenfvOES(coord, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14463,11 +16195,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetTexGenivOES(coord, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14496,11 +16232,15 @@
arg_params->add_intvalue((int)params);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glGetTexGenxvOES(coord, pname, params);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14523,11 +16263,15 @@
arg_eqn->add_intvalue((int)eqn);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClipPlanefIMG(p, eqn);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
@@ -14550,11 +16294,15 @@
arg_eqn->add_intvalue((int)eqn);
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
glContext->hooks->gl.glClipPlanexIMG(p, eqn);
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
}
diff --git a/opengl/libs/GLES_trace/src/gltrace_fixup.cpp b/opengl/libs/GLES_trace/src/gltrace_fixup.cpp
index 871b5dc..6c4feb5 100644
--- a/opengl/libs/GLES_trace/src/gltrace_fixup.cpp
+++ b/opengl/libs/GLES_trace/src/gltrace_fixup.cpp
@@ -15,9 +15,13 @@
*/
#include <cutils/log.h>
+#include <GLES/gl.h>
+#include <GLES/glext.h>
#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
#include "gltrace.pb.h"
+#include "gltrace_api.h"
#include "gltrace_context.h"
#include "gltrace_fixup.h"
@@ -198,6 +202,20 @@
arg_strpp->add_charvalue(src);
}
+void fixup_glUniformGenericInteger(int argIndex, int nIntegers, GLMessage *glmsg) {
+ /* void glUniform?iv(GLint location, GLsizei count, const GLint *value); */
+ GLMessage_DataType *arg_values = glmsg->mutable_args(argIndex);
+ GLint *src = (GLint*)arg_values->intvalue(0);
+
+ arg_values->set_type(GLMessage::DataType::INT);
+ arg_values->set_isarray(true);
+ arg_values->clear_intvalue();
+
+ for (int i = 0; i < nIntegers; i++) {
+ arg_values->add_intvalue(*src++);
+ }
+}
+
void fixup_glUniformGeneric(int argIndex, int nFloats, GLMessage *glmsg) {
GLMessage_DataType *arg_values = glmsg->mutable_args(argIndex);
GLfloat *src = (GLfloat*)arg_values->intvalue(0);
@@ -223,6 +241,10 @@
GLMessage_DataType *arg_intarray = glmsg->mutable_args(argIndex);
GLint *intp = (GLint *)arg_intarray->intvalue(0);
+ if (intp == NULL) {
+ return;
+ }
+
arg_intarray->set_type(GLMessage::DataType::INT);
arg_intarray->set_isarray(true);
arg_intarray->clear_intvalue();
@@ -232,6 +254,15 @@
}
}
+void fixup_GenericEnumArray(int argIndex, int nEnums, GLMessage *glmsg) {
+ // fixup as if they were ints
+ fixup_GenericIntArray(argIndex, nEnums, glmsg);
+
+ // and then set the data type to be enum
+ GLMessage_DataType *arg_enumarray = glmsg->mutable_args(argIndex);
+ arg_enumarray->set_type(GLMessage::DataType::ENUM);
+}
+
void fixup_glGenGeneric(GLMessage *glmsg) {
/* void glGen*(GLsizei n, GLuint * buffers); */
GLMessage_DataType arg_n = glmsg->args(0);
@@ -270,13 +301,94 @@
arg_params->add_floatvalue(*src);
}
-void fixupGLMessage(GLTraceContext *context, nsecs_t start, nsecs_t end, GLMessage *glmsg) {
+void fixup_glLinkProgram(GLMessage *glmsg) {
+ /* void glLinkProgram(GLuint program); */
+ GLuint program = glmsg->args(0).intvalue(0);
+
+ /* We don't have to fixup this call, but as soon as a program is linked,
+ we obtain information about all active attributes and uniforms to
+ pass on to the debugger. Note that in order to pass this info to
+ the debugger, all we need to do is call the trace versions of the
+ necessary calls. */
+
+ GLint n, maxNameLength;
+ GLchar *name;
+ GLint size;
+ GLenum type;
+
+ // obtain info regarding active attributes
+ GLTrace_glGetProgramiv(program, GL_ACTIVE_ATTRIBUTES, &n);
+ GLTrace_glGetProgramiv(program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &maxNameLength);
+
+ name = (GLchar *) malloc(maxNameLength);
+ for (int i = 0; i < n; i++) {
+ GLTrace_glGetActiveAttrib(program, i, maxNameLength, NULL, &size, &type, name);
+ }
+ free(name);
+
+ // obtain info regarding active uniforms
+ GLTrace_glGetProgramiv(program, GL_ACTIVE_UNIFORMS, &n);
+ GLTrace_glGetProgramiv(program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxNameLength);
+
+ name = (GLchar *) malloc(maxNameLength);
+ for (int i = 0; i < n; i++) {
+ GLTrace_glGetActiveUniform(program, i, maxNameLength, NULL, &size, &type, name);
+ }
+ free(name);
+}
+
+/** Given a glGetActive[Uniform|Attrib] call, obtain the location
+ * of the variable in the call.
+ */
+int getShaderVariableLocation(GLTraceContext *context, GLMessage *glmsg) {
+ GLMessage_Function func = glmsg->function();
+ if (func != GLMessage::glGetActiveAttrib && func != GLMessage::glGetActiveUniform) {
+ return -1;
+ }
+
+ int program = glmsg->args(0).intvalue(0);
+ GLchar *name = (GLchar*) glmsg->args(6).intvalue(0);
+
+ if (func == GLMessage::glGetActiveAttrib) {
+ return context->hooks->gl.glGetAttribLocation(program, name);
+ } else {
+ return context->hooks->gl.glGetUniformLocation(program, name);
+ }
+}
+
+void fixup_glGetActiveAttribOrUniform(GLMessage *glmsg, int location) {
+ /* void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize,
+ GLsizei* length, GLint* size, GLenum* type, GLchar* name); */
+ /* void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize,
+ GLsizei* length, GLint* size, GLenum* type, GLchar* name) */
+
+ fixup_GenericIntArray(3, 1, glmsg); // length
+ fixup_GenericIntArray(4, 1, glmsg); // size
+ fixup_GenericEnumArray(5, 1, glmsg); // type
+ fixup_CStringPtr(6, glmsg); // name
+
+ // The index argument in the glGetActive[Attrib|Uniform] functions
+ // does not correspond to the actual location index as used in
+ // glUniform*() or glVertexAttrib*() to actually upload the data.
+ // In order to make things simpler for the debugger, we also pass
+ // a hidden location argument that stores the actual location.
+ // append the location value to the end of the argument list
+ GLMessage_DataType *arg_location = glmsg->add_args();
+ arg_location->set_isarray(false);
+ arg_location->set_type(GLMessage::DataType::INT);
+ arg_location->add_intvalue(location);
+}
+
+void fixupGLMessage(GLTraceContext *context, nsecs_t wallStart, nsecs_t wallEnd,
+ nsecs_t threadStart, nsecs_t threadEnd,
+ GLMessage *glmsg) {
// for all messages, set the current context id
glmsg->set_context_id(context->getId());
// set start time and duration
- glmsg->set_start_time(start);
- glmsg->set_duration((unsigned)(end - start));
+ glmsg->set_start_time(wallStart);
+ glmsg->set_duration((unsigned)(wallEnd - wallStart));
+ glmsg->set_threadtime((unsigned)(threadEnd - threadStart));
// do any custom message dependent processing
switch (glmsg->function()) {
@@ -292,6 +404,19 @@
case GLMessage::glGenTextures: /* void glGenTextures(GLsizei n, GLuint *textures); */
fixup_glGenGeneric(glmsg);
break;
+ case GLMessage::glLinkProgram: /* void glLinkProgram(GLuint program); */
+ fixup_glLinkProgram(glmsg);
+ break;
+ case GLMessage::glGetActiveAttrib:
+ fixup_glGetActiveAttribOrUniform(glmsg, getShaderVariableLocation(context, glmsg));
+ break;
+ case GLMessage::glGetActiveUniform:
+ fixup_glGetActiveAttribOrUniform(glmsg, getShaderVariableLocation(context, glmsg));
+ break;
+ case GLMessage::glBindAttribLocation:
+ /* void glBindAttribLocation(GLuint program, GLuint index, const GLchar* name); */
+ fixup_CStringPtr(2, glmsg);
+ break;
case GLMessage::glGetAttribLocation:
case GLMessage::glGetUniformLocation:
/* int glGetAttribLocation(GLuint program, const GLchar* name) */
@@ -331,6 +456,38 @@
case GLMessage::glShaderSource:
fixup_glShaderSource(glmsg);
break;
+ case GLMessage::glUniform1iv:
+ /* void glUniform1iv(GLint location, GLsizei count, const GLint *value); */
+ fixup_glUniformGenericInteger(2, 1, glmsg);
+ break;
+ case GLMessage::glUniform2iv:
+ /* void glUniform2iv(GLint location, GLsizei count, const GLint *value); */
+ fixup_glUniformGenericInteger(2, 2, glmsg);
+ break;
+ case GLMessage::glUniform3iv:
+ /* void glUniform3iv(GLint location, GLsizei count, const GLint *value); */
+ fixup_glUniformGenericInteger(2, 3, glmsg);
+ break;
+ case GLMessage::glUniform4iv:
+ /* void glUniform4iv(GLint location, GLsizei count, const GLint *value); */
+ fixup_glUniformGenericInteger(2, 4, glmsg);
+ break;
+ case GLMessage::glUniform1fv:
+ /* void glUniform1fv(GLint location, GLsizei count, const GLfloat *value); */
+ fixup_glUniformGeneric(2, 1, glmsg);
+ break;
+ case GLMessage::glUniform2fv:
+ /* void glUniform2fv(GLint location, GLsizei count, const GLfloat *value); */
+ fixup_glUniformGeneric(2, 2, glmsg);
+ break;
+ case GLMessage::glUniform3fv:
+ /* void glUniform3fv(GLint location, GLsizei count, const GLfloat *value); */
+ fixup_glUniformGeneric(2, 3, glmsg);
+ break;
+ case GLMessage::glUniform4fv:
+ /* void glUniform4fv(GLint location, GLsizei count, const GLfloat *value); */
+ fixup_glUniformGeneric(2, 4, glmsg);
+ break;
case GLMessage::glUniformMatrix2fv:
/* void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose,
const GLfloat* value) */
diff --git a/opengl/libs/GLES_trace/src/gltrace_fixup.h b/opengl/libs/GLES_trace/src/gltrace_fixup.h
index 64f7545..f63b056 100644
--- a/opengl/libs/GLES_trace/src/gltrace_fixup.h
+++ b/opengl/libs/GLES_trace/src/gltrace_fixup.h
@@ -25,7 +25,9 @@
namespace android {
namespace gltrace {
-void fixupGLMessage(GLTraceContext *curContext, nsecs_t start, nsecs_t end, GLMessage *message);
+void fixupGLMessage(GLTraceContext *curContext, nsecs_t wallStart, nsecs_t wallEnd,
+ nsecs_t threadStart, nsecs_t threadEnd,
+ GLMessage *message);
void fixup_addFBContents(GLTraceContext *curContext, GLMessage *message, FBBinding fbToRead);
};
diff --git a/opengl/libs/GLES_trace/tools/genapi.py b/opengl/libs/GLES_trace/tools/genapi.py
index 557e407..e1660be 100755
--- a/opengl/libs/GLES_trace/tools/genapi.py
+++ b/opengl/libs/GLES_trace/tools/genapi.py
@@ -162,13 +162,15 @@
<!--(end)-->
// call function
- nsecs_t start_time = systemTime();
+ nsecs_t wallStartTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ nsecs_t threadStartTime = systemTime(SYSTEM_TIME_THREAD);
<!--(if retType != "void")-->
$!retType!$ retValue = glContext->hooks->gl.$!callsite!$;
<!--(else)-->
glContext->hooks->gl.$!callsite!$;
<!--(end)-->
- nsecs_t end_time = systemTime();
+ nsecs_t threadEndTime = systemTime(SYSTEM_TIME_THREAD);
+ nsecs_t wallEndTime = systemTime(SYSTEM_TIME_MONOTONIC);
<!--(if retType != "void")-->
// set return value
@@ -178,7 +180,9 @@
rt->$!retDataType.getProtobufCall()!$retValue);
<!--(end)-->
- fixupGLMessage(glContext, start_time, end_time, &glmsg);
+ fixupGLMessage(glContext, wallStartTime, wallEndTime,
+ threadStartTime, threadEndTime,
+ &glmsg);
glContext->traceGLMessage(&glmsg);
<!--(if retType != "void")-->
diff --git a/opengl/libs/egl_impl.h b/opengl/libs/egl_impl.h
index 8ff51ec..cb0e908 100644
--- a/opengl/libs/egl_impl.h
+++ b/opengl/libs/egl_impl.h
@@ -30,7 +30,6 @@
// ----------------------------------------------------------------------------
EGLAPI const GLubyte * egl_get_string_for_current_context(GLenum name);
-EGLAPI EGLImageKHR egl_get_image_for_current_context(EGLImageKHR image);
// ----------------------------------------------------------------------------
}; // namespace android
diff --git a/opengl/libs/tools/glapigen b/opengl/libs/tools/glapigen
index 9be40cf..4d8334f 100755
--- a/opengl/libs/tools/glapigen
+++ b/opengl/libs/tools/glapigen
@@ -37,12 +37,6 @@
#printf("%s", $line);
my $prefix = "";
- if ($name eq "glEGLImageTargetTexture2DOES") {
- $prefix = "__";
- }
- if ($name eq "glEGLImageTargetRenderbufferStorageOES") {
- $prefix = "__";
- }
if ($name eq "glGetString") {
$prefix = "__";
}
diff --git a/services/surfaceflinger/LayerScreenshot.cpp b/services/surfaceflinger/LayerScreenshot.cpp
index c127fa6..c7cf46e 100644
--- a/services/surfaceflinger/LayerScreenshot.cpp
+++ b/services/surfaceflinger/LayerScreenshot.cpp
@@ -70,6 +70,8 @@
glBindTexture(GL_TEXTURE_2D, mTextureName);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
mTexCoords[0] = 0; mTexCoords[1] = v;
mTexCoords[2] = 0; mTexCoords[3] = 0;
mTexCoords[4] = u; mTexCoords[5] = 0;
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 40717f4..9e3f548 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1922,6 +1922,8 @@
glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, vtx);
@@ -2094,6 +2096,8 @@
glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, vtx);