/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <stdlib.h>
#include <dali/integration-api/debug.h>
#include <dali/integration-api/profiling.h>
-#include <dali/public-api/actors/image-actor.h>
#include <dali/public-api/common/stage.h>
#include <dali/public-api/object/ref-object.h>
#include <dali/public-api/object/base-object.h>
namespace Adaptor
{
-ObjectProfiler::ObjectProfiler()
-: mIsActive(false)
+ObjectProfiler::ObjectProfiler( unsigned int timeInterval )
{
// This class must be created after the Stage; this means it doesn't count the initial objects
// that are created by the stage (base layer, default camera actor)
mObjectRegistry = Dali::Stage::GetCurrent().GetObjectRegistry();
- char* profile = getenv("PROFILE_DALI_OBJECTS");
- if( profile != NULL )
- {
- mIsActive = true;
- int timeInterval = atoi(profile);
- if( timeInterval > 0 )
- {
- mTimer = Dali::Timer::New(timeInterval*1000);
- mTimer.TickSignal().Connect( this, &ObjectProfiler::OnTimeout );
- mTimer.Start();
- }
+ mTimer = Dali::Timer::New( timeInterval * 1000 );
+ mTimer.TickSignal().Connect( this, &ObjectProfiler::OnTimeout );
+ mTimer.Start();
- mObjectRegistry.ObjectCreatedSignal().Connect( this, &ObjectProfiler::OnObjectCreated );
- mObjectRegistry.ObjectDestroyedSignal().Connect( this, &ObjectProfiler::OnObjectDestroyed );
- }
+ mObjectRegistry.ObjectCreatedSignal().Connect( this, &ObjectProfiler::OnObjectCreated );
+ mObjectRegistry.ObjectDestroyedSignal().Connect( this, &ObjectProfiler::OnObjectDestroyed );
}
ObjectProfiler::~ObjectProfiler()
void ObjectProfiler::DisplayInstanceCounts()
{
- InstanceCountMapIterator iter = mInstanceCountMap.begin();
- InstanceCountMapIterator end = mInstanceCountMap.end();
-
- for( ; iter != end; iter++ )
+ for( auto&& element : mInstanceCountContainer )
{
- int memorySize = GetMemorySize(iter->first, iter->second);
+ int memorySize = GetMemorySize( element.first, element.second );
if( memorySize > 0 )
{
LogMessage( Debug::DebugInfo, "%-30s: % 4d Memory MemorySize: ~% 6.1f kB\n",
- iter->first.c_str(), iter->second, memorySize / 1024.0f );
+ element.first.c_str(), element.second, memorySize / 1024.0f );
}
else
{
LogMessage( Debug::DebugInfo, "%-30s: % 4d\n",
- iter->first.c_str(), iter->second );
+ element.first.c_str(), element.second );
}
}
LogMessage(Debug::DebugInfo, "\n");
-
- int quadCount = 0;
-
- // Count number of quads:
-
- for( InstanceTypes::iterator iter = mInstanceTypes.begin(), end = mInstanceTypes.end(); iter != end; ++iter )
- {
- if( iter->second.compare("ImageActor") == 0 )
- {
- BaseHandle handle(iter->first);
- Dali::ImageActor imageActor = Dali::ImageActor::DownCast(handle);
- if( imageActor )
- {
- if( imageActor.GetStyle() == Dali::ImageActor::STYLE_QUAD )
- {
- quadCount++;
- }
- }
- }
- }
-
- LogMessage(Debug::DebugInfo, "Number of image actors using Quad style: %d\n", quadCount);
}
bool ObjectProfiler::OnTimeout()
mInstanceTypes.push_back(InstanceTypePair(&handle.GetBaseObject(), theType));
- InstanceCountMapIterator iter = mInstanceCountMap.find(theType);
- if( iter == mInstanceCountMap.end() )
+ bool found = false;
+ for( auto&& element : mInstanceCountContainer )
{
- InstanceCountPair instanceCount(theType, 1);
- mInstanceCountMap.insert(instanceCount);
+ if( element.first == theType )
+ {
+ element.second++;
+ found = true;
+ }
}
- else
+ if( !found )
{
- iter->second++;
+ InstanceCountPair instanceCount( theType, 1 );
+ mInstanceCountContainer.emplace_back( instanceCount );
}
}
{
const BaseObject* baseObject = static_cast<const BaseObject*>(object);
- InstanceTypes::iterator end = mInstanceTypes.end();
- for( InstanceTypes::iterator iter = mInstanceTypes.begin(); iter != end; iter++)
+ const auto end = mInstanceTypes.end();
+ for( auto iter = mInstanceTypes.begin(); iter != end; ++iter )
{
if( iter->first == baseObject )
{
- const std::string& theType = iter->second;
+ const auto& theType = iter->second;
if( !theType.empty() )
{
- InstanceCountMapIterator countIter = mInstanceCountMap.find(theType);
- if( countIter != mInstanceCountMap.end() )
+ auto&& countIter = std::find_if( mInstanceCountContainer.begin(),
+ mInstanceCountContainer.end(),
+ [theType] ( const InstanceCountPair& instance )
+ { return instance.first == theType; } );
+ if( countIter != mInstanceCountContainer.end() )
{
- countIter->second--;
+ (*countIter).second--;
}
}
mInstanceTypes.erase( iter );
- break;
+ return;
}
}
}
{ "Actor", ACTOR_MEMORY_SIZE },
{ "Layer", LAYER_MEMORY_SIZE },
{ "CameraActor", CAMERA_ACTOR_MEMORY_SIZE },
- { "ImageActor", IMAGE_ACTOR_MEMORY_SIZE },
{ "Image", IMAGE_MEMORY_SIZE },
{ "Renderer", RENDERER_MEMORY_SIZE },
{ "Geometry", GEOMETRY_MEMORY_SIZE },
{ "PropertyBuffer", PROPERTY_BUFFER_MEMORY_SIZE },
- { "Material", MATERIAL_MEMORY_SIZE },
+ { "TextureSet", TEXTURE_SET_MEMORY_SIZE },
{ "Sampler", SAMPLER_MEMORY_SIZE },
{ "Shader", SHADER_MEMORY_SIZE },
};