rsThreadIO.cpp revision a9e7a05b84470257637c97d65f6562aa832c66ef
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); 27d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 28d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 29d19f10d43aa400e1183aa21a97099d02074131a2Jason SamsThreadIO::~ThreadIO() 30d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 32d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 33f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Samsvoid ThreadIO::shutdown() 34f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams{ 35f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams mToCore.shutdown(); 36f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams} 37f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams 385f7fc27dce3f0ea0ce7532ee8ecd8a2cd01ec47bJason Samsbool ThreadIO::playCoreCommands(Context *con, bool waitForCommand) 39d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 40a09f11d6c641726b61f80c15230a18d31c146fecJason Sams bool ret = false; 415f7fc27dce3f0ea0ce7532ee8ecd8a2cd01ec47bJason Sams while(!mToCore.isEmpty() || waitForCommand) { 42f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams uint32_t cmdID = 0; 43f4d160653fe405eba9d6f55448ac4599c6cadd77Jason Sams uint32_t cmdSize = 0; 44a09f11d6c641726b61f80c15230a18d31c146fecJason Sams ret = true; 459ac2c66f0171593113238635c6a7921c41215e77Joe Onorato if (con->logTimes) { 469ac2c66f0171593113238635c6a7921c41215e77Joe Onorato con->timerSet(Context::RS_TIMER_IDLE); 479ac2c66f0171593113238635c6a7921c41215e77Joe Onorato } 48d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams const void * data = mToCore.get(&cmdID, &cmdSize); 49a9e7a05b84470257637c97d65f6562aa832c66efJason Sams if (!cmdSize) { 50a9e7a05b84470257637c97d65f6562aa832c66efJason Sams // exception occured, probably shutdown. 51a9e7a05b84470257637c97d65f6562aa832c66efJason Sams return false; 52a9e7a05b84470257637c97d65f6562aa832c66efJason Sams } 539ac2c66f0171593113238635c6a7921c41215e77Joe Onorato if (con->logTimes) { 549ac2c66f0171593113238635c6a7921c41215e77Joe Onorato con->timerSet(Context::RS_TIMER_INTERNAL); 559ac2c66f0171593113238635c6a7921c41215e77Joe Onorato } 565f7fc27dce3f0ea0ce7532ee8ecd8a2cd01ec47bJason Sams waitForCommand = false; 57f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams //LOGV("playCoreCommands 3 %i %i", cmdID, cmdSize); 58d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 59d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams gPlaybackFuncs[cmdID](con, data); 60d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams mToCore.next(); 61d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 62a09f11d6c641726b61f80c15230a18d31c146fecJason Sams return ret; 63d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 64d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 65d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 66