rsThreadIO.cpp revision e514b45de8561fbc6ef6770845102ca10b0a69d7
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsContext.h" 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsThreadIO.h" 20326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 21326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android; 22326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript; 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 24326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsThreadIO::ThreadIO() 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mToCore.init(16 * 1024); 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 29326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsThreadIO::~ThreadIO() 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 338c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Samsvoid ThreadIO::shutdown() 348c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams{ 358c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams mToCore.shutdown(); 368c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams} 378c0ee6567b3c874dd472843eb7918ae68d1b9739Jason Sams 38732f1c0a29cc468ea271ca3bd654239a0a973fd5Jason Samsbool ThreadIO::playCoreCommands(Context *con, bool waitForCommand) 39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 40a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams bool ret = false; 41732f1c0a29cc468ea271ca3bd654239a0a973fd5Jason Sams while(!mToCore.isEmpty() || waitForCommand) { 4224371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams uint32_t cmdID = 0; 4324371d93cdb6999971c4058f78974da3c3d5fc64Jason Sams uint32_t cmdSize = 0; 44a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams ret = true; 4576371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato if (con->logTimes) { 4676371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato con->timerSet(Context::RS_TIMER_IDLE); 4776371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato } 48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams const void * data = mToCore.get(&cmdID, &cmdSize); 49e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams if (!cmdSize) { 50e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams // exception occured, probably shutdown. 51e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams return false; 52e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams } 5376371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato if (con->logTimes) { 5476371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato con->timerSet(Context::RS_TIMER_INTERNAL); 5576371fff76412fd020e24ddb8bf1ddb5c75f0ed1Joe Onorato } 56732f1c0a29cc468ea271ca3bd654239a0a973fd5Jason Sams waitForCommand = false; 57992a0b70d8fd7a14f0c57bc3c7e16c1f269a6609Jason Sams //LOGV("playCoreCommands 3 %i %i", cmdID, cmdSize); 58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams gPlaybackFuncs[cmdID](con, data); 60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams mToCore.next(); 61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 62a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams return ret; 63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 66