1d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian/* 2d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * Copyright (C) 2010 The Android Open Source Project 3d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * 4d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * you may not use this file except in compliance with the License. 6d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * You may obtain a copy of the License at 7d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * 8d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * 10d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * Unless required by applicable law or agreed to in writing, software 11d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * See the License for the specific language governing permissions and 14d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian * limitations under the License. 15d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian */ 16d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 175b06dc00ac143e030292ada48ed8afc0ac079a30Nanik Tolaram#include <android/looper.h> 18d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian#include <gui/DisplayEventReceiver.h> 19d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian#include <utils/Looper.h> 20d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 21d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianusing namespace android; 22d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 23a282f588692a04da05eceafa142a067c038da806Dan Stozaint receiver(int /*fd*/, int /*events*/, void* data) 24d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian{ 25d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian DisplayEventReceiver* q = (DisplayEventReceiver*)data; 26d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 27d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian ssize_t n; 28d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian DisplayEventReceiver::Event buffer[1]; 29d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 30d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian static nsecs_t oldTimeStamp = 0; 31d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 32d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian while ((n = q->getEvents(buffer, 1)) > 0) { 33d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian for (int i=0 ; i<n ; i++) { 34d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian if (buffer[i].header.type == DisplayEventReceiver::DISPLAY_EVENT_VSYNC) { 35d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian printf("event vsync: count=%d\t", buffer[i].vsync.count); 36d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } 37d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian if (oldTimeStamp) { 38d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian float t = float(buffer[i].header.timestamp - oldTimeStamp) / s2ns(1); 39d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian printf("%f ms (%f Hz)\n", t*1000, 1.0/t); 40d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } 41d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian oldTimeStamp = buffer[i].header.timestamp; 42d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } 43d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } 44d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian if (n<0) { 45d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian printf("error reading events (%s)\n", strerror(-n)); 46d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } 47d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian return 1; 48d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian} 49d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 50a282f588692a04da05eceafa142a067c038da806Dan Stozaint main(int /*argc*/, char** /*argv*/) 51d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian{ 52d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian DisplayEventReceiver myDisplayEvent; 53d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 54d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 55d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian sp<Looper> loop = new Looper(false); 56d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian loop->addFd(myDisplayEvent.getFd(), 0, ALOOPER_EVENT_INPUT, receiver, 57d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian &myDisplayEvent); 58d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 593cf199aef6250552555344944c3e3a6e4ab05f92Mathias Agopian myDisplayEvent.setVsyncRate(1); 603cf199aef6250552555344944c3e3a6e4ab05f92Mathias Agopian 61d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian do { 62d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian //printf("about to poll...\n"); 63d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian int32_t ret = loop->pollOnce(-1); 64d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian switch (ret) { 65d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian case ALOOPER_POLL_WAKE: 66d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian //("ALOOPER_POLL_WAKE\n"); 67d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian break; 68d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian case ALOOPER_POLL_CALLBACK: 69d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian //("ALOOPER_POLL_CALLBACK\n"); 70d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian break; 71d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian case ALOOPER_POLL_TIMEOUT: 72d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian printf("ALOOPER_POLL_TIMEOUT\n"); 73d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian break; 74d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian case ALOOPER_POLL_ERROR: 75d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian printf("ALOOPER_POLL_TIMEOUT\n"); 76d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian break; 77d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian default: 78d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian printf("ugh? poll returned %d\n", ret); 79d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian break; 80d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } 81d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian } while (1); 82d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian 83d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian return 0; 84d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian} 85