1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/* 2d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Copyright (C) 2009 The Android Open Source Project 3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License. 6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at 7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software 11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and 14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License. 15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */ 16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 17d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsContext.h" 18d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsThreadIO.h" 20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 21d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android; 22d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsusing namespace android::renderscript; 23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 24d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsThreadIO::ThreadIO() 25d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 26d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams mToCore.init(16 * 1024); 27516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mToClient.init(1024); 28d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 29d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 30d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsThreadIO::~ThreadIO() 31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 34f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Samsvoid ThreadIO::shutdown() 35f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams{ 36f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams mToCore.shutdown(); 37f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams} 38f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams 395f7fc27dce3f0ea0ce7532ee8ecd8a2cd01ec47bJason Samsbool ThreadIO::playCoreCommands(Context *con, bool waitForCommand) 40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 41a09f11d6c641726b61f80c15230a18d31c146fecJason Sams bool ret = false; 425f7fc27dce3f0ea0ce7532ee8ecd8a2cd01ec47bJason Sams while(!mToCore.isEmpty() || waitForCommand) { 43f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams uint32_t cmdID = 0; 44f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams uint32_t cmdSize = 0; 45a09f11d6c641726b61f80c15230a18d31c146fecJason Sams ret = true; 4666b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams if (con->props.mLogTimes) { 479ac2c66f0171593113238635c6a7921c41215e77Joe Onorato con->timerSet(Context::RS_TIMER_IDLE); 489ac2c66f0171593113238635c6a7921c41215e77Joe Onorato } 49d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams const void * data = mToCore.get(&cmdID, &cmdSize); 50a9e7a05b84470257637c97d65f6562aa832c66efJason Sams if (!cmdSize) { 51a9e7a05b84470257637c97d65f6562aa832c66efJason Sams // exception occured, probably shutdown. 52a9e7a05b84470257637c97d65f6562aa832c66efJason Sams return false; 53a9e7a05b84470257637c97d65f6562aa832c66efJason Sams } 5466b2771d745aa66df5cf80b300b5ba0f936ff22eJason Sams if (con->props.mLogTimes) { 559ac2c66f0171593113238635c6a7921c41215e77Joe Onorato con->timerSet(Context::RS_TIMER_INTERNAL); 569ac2c66f0171593113238635c6a7921c41215e77Joe Onorato } 575f7fc27dce3f0ea0ce7532ee8ecd8a2cd01ec47bJason Sams waitForCommand = false; 58f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams //LOGV("playCoreCommands 3 %i %i", cmdID, cmdSize); 59d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 60d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams gPlaybackFuncs[cmdID](con, data); 61d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams mToCore.next(); 62d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 63a09f11d6c641726b61f80c15230a18d31c146fecJason Sams return ret; 64d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 65d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 66d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 67