2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali/internal/update/resources/complete-status-manager.h>
22 #include <dali/integration-api/gl-sync-abstraction.h>
23 #include <dali/integration-api/resource-declarations.h>
24 #include <dali/internal/update/resources/resource-manager.h>
25 #include <dali/internal/update/resources/resource-tracker.h>
26 #include <dali/internal/update/resources/sync-resource-tracker.h>
27 #include <dali/internal/update/controllers/render-message-dispatcher.h>
28 #include <dali/internal/render/common/render-tracker.h>
29 #include <dali/internal/update/resources/complete-status-manager-debug.h>
36 CompleteStatusManager::CompleteStatusManager( Integration::GlSyncAbstraction& glSyncAbstraction,
37 SceneGraph::RenderMessageDispatcher& renderMessageDispatcher,
38 ResourceManager& resourceManager )
39 : mGlSyncAbstraction(glSyncAbstraction),
40 mRenderMessageDispatcher(renderMessageDispatcher),
41 mResourceManager(resourceManager)
43 TRACKER_LOG(Debug::Verbose);
46 CompleteStatusManager::~CompleteStatusManager()
48 // Delete all extant resource trackers
49 CompleteStatusManager::TrackedResourcesIter iter = mTrackedResources.begin();
50 CompleteStatusManager::TrackedResourcesIter end = mTrackedResources.end();
57 TRACKER_LOG(Debug::Verbose);
60 void CompleteStatusManager::TrackResource( Integration::ResourceId id )
62 TRACKER_LOG_FMT( Debug::General, "id:%d\n", id );
64 CompleteStatusManager::TrackedResourcesIter iter = mTrackedResources.find(id);
65 if( iter == mTrackedResources.end() )
67 // Create new tracker for ID
68 ResourceTracker* resourceTracker = CreateResourceTracker( id );
69 resourceTracker->Initialize();
70 mTrackedResources[id] = resourceTracker;
74 // We've found existing tracker. Reset it
75 iter->second->Reset();
79 void CompleteStatusManager::StopTrackingResource( Integration::ResourceId id )
81 TRACKER_LOG_FMT( Debug::General, "id:%d\n", id );
83 CompleteStatusManager::TrackedResourcesIter iter = mTrackedResources.find(id);
84 if( iter != mTrackedResources.end() )
86 iter->second->OnDestroy();
88 mTrackedResources.erase(iter);
92 ResourceTracker* CompleteStatusManager::FindResourceTracker( Integration::ResourceId id )
94 ResourceTracker* tracker = NULL;
96 TrackedResourcesIter iter = mTrackedResources.find(id);
97 if( iter != mTrackedResources.end() )
99 tracker = iter->second;
102 TRACKER_LOG_FMT(Debug::General, "id:%d = tracker:%p\n", id, tracker);
106 CompleteStatusManager::CompleteState CompleteStatusManager::GetStatus( Integration::ResourceId id )
108 CompleteState readiness = CompleteStatusManager::NOT_READY;
112 TrackedResourcesIter iter = mTrackedResources.find(id);
113 if( iter != mTrackedResources.end() )
115 if( iter->second->IsComplete() )
117 readiness = CompleteStatusManager::COMPLETE;
120 else if( mResourceManager.IsResourceLoaded(id) )
122 readiness = CompleteStatusManager::COMPLETE;
124 else if( mResourceManager.IsResourceLoadFailed(id) )
126 readiness = CompleteStatusManager::NEVER;
131 // Loading is essentially finished if we don't have a resource ID
132 readiness = CompleteStatusManager::COMPLETE;
135 TRACKER_LOG_FMT(Debug::General, "id:%d = %s\n", id, (readiness==CompleteStatusManager::COMPLETE)?"COMPLETE":((readiness==CompleteStatusManager::NEVER)?"NEVER":"NOT_READY"));
140 ResourceTracker* CompleteStatusManager::CreateResourceTracker( Integration::ResourceId id )
142 ResourceTracker* resourceTracker = NULL;
143 BitmapMetadata bitmapMetadata = mResourceManager.GetBitmapMetadata( id );
144 if( bitmapMetadata.GetIsNativeImage() && bitmapMetadata.GetIsFramebuffer() )
146 resourceTracker = new SyncResourceTracker( mGlSyncAbstraction, mRenderMessageDispatcher );
150 resourceTracker = new ResourceTracker();
152 return resourceTracker;