Optimization to reduce Handle size by 50% 83/24083/1
authorPaul Wisbey <p.wisbey@samsung.com>
Thu, 19 Jun 2014 17:56:41 +0000 (18:56 +0100)
committerAdeel Kazmi <adeel.kazmi@samsung.com>
Tue, 8 Jul 2014 13:15:33 +0000 (14:15 +0100)
[problem]      Memory usage is too high, event-thread operations are too heavy.
[cause]        Too much Dali::Handle data copied around.
[solution]     Remove all virtual methods from handles, to avoid needing a C++ vptr

Change-Id: Ib03898bc8fe073d41e5a44cc49af91958d164ee1
Signed-off-by: Adeel Kazmi <adeel.kazmi@samsung.com>
50 files changed:
capi/dali/public-api/actors/actor.h
capi/dali/public-api/actors/camera-actor.h
capi/dali/public-api/actors/custom-actor.h
capi/dali/public-api/actors/image-actor.h
capi/dali/public-api/actors/layer.h
capi/dali/public-api/actors/mesh-actor.h
capi/dali/public-api/actors/renderable-actor.h
capi/dali/public-api/actors/text-actor.h
capi/dali/public-api/animation/active-constraint.h
capi/dali/public-api/animation/animation.h
capi/dali/public-api/animation/constraint.h
capi/dali/public-api/animation/key-frames.h
capi/dali/public-api/common/stage.h
capi/dali/public-api/events/gesture-detector.h
capi/dali/public-api/events/long-press-gesture-detector.h
capi/dali/public-api/events/pan-gesture-detector.h
capi/dali/public-api/events/pinch-gesture-detector.h
capi/dali/public-api/events/tap-gesture-detector.h
capi/dali/public-api/geometry/animatable-mesh.h
capi/dali/public-api/images/bitmap-image.h
capi/dali/public-api/images/encoded-buffer-image.h
capi/dali/public-api/images/frame-buffer-image.h
capi/dali/public-api/images/image.h
capi/dali/public-api/modeling/material.h
capi/dali/public-api/object/base-handle.h
capi/dali/public-api/object/constrainable.h
capi/dali/public-api/object/handle.h
capi/dali/public-api/object/object-registry.h
capi/dali/public-api/object/property-notification.h
capi/dali/public-api/render-tasks/render-task-list.h
capi/dali/public-api/render-tasks/render-task.h
capi/dali/public-api/shader-effects/shader-effect.h
capi/dali/public-api/text/font.h
dali/public-api/actors/light-actor.h
dali/public-api/common/light.h
dali/public-api/dynamics/dynamics-body-config.h
dali/public-api/dynamics/dynamics-body.h
dali/public-api/dynamics/dynamics-collision.h
dali/public-api/dynamics/dynamics-joint.h
dali/public-api/dynamics/dynamics-shape.h
dali/public-api/dynamics/dynamics-world-config.h
dali/public-api/dynamics/dynamics-world.h
dali/public-api/geometry/cloth.h
dali/public-api/geometry/mesh.h
dali/public-api/images/glyph-image.h
dali/public-api/images/nine-patch-image.h
dali/public-api/modeling/entity.h
dali/public-api/modeling/model-data.h
dali/public-api/modeling/model.h
dali/public-api/object/type-info.h

index dddd842..b9b5fcf 100644 (file)
@@ -312,11 +312,11 @@ public:
   static Actor DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Dali::Actor is intended as a base class
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Actor();
+  ~Actor();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index afe744d..20a560e 100644 (file)
@@ -127,11 +127,11 @@ public:
   static CameraActor DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~CameraActor();
+  ~CameraActor();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 40e2afb..cd62f49 100644 (file)
@@ -64,11 +64,11 @@ public:
   static CustomActor DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~CustomActor();
+  ~CustomActor();
 
   /**
    * @brief Retrieve the custom actor implementation.
index 65acdee..d612f53 100644 (file)
@@ -196,11 +196,11 @@ public:
   static ImageActor DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~ImageActor();
+  ~ImageActor();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index b0fbe09..153e10b 100644 (file)
@@ -109,11 +109,11 @@ public:
   static Layer DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Layer();
+  ~Layer();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index dab35e7..c36d8ca 100644 (file)
@@ -90,11 +90,11 @@ public:
   static MeshActor DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~MeshActor();
+  ~MeshActor();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index d7ebdc8..69ea621 100644 (file)
@@ -74,11 +74,11 @@ public:
   static RenderableActor DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~RenderableActor();
+  ~RenderableActor();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 08aa948..82566e5 100644 (file)
@@ -212,11 +212,11 @@ public:
   static TextActor DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~TextActor();
+  ~TextActor();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index bf3bf83..187b777 100644 (file)
@@ -61,9 +61,11 @@ public:
   ActiveConstraint();
 
   /**
-   * @brief Destructor.
+   * @brief Dali::ActiveConstraint is intended as a base class
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~ActiveConstraint();
+  ~ActiveConstraint();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 412f038..7921495 100644 (file)
@@ -171,9 +171,11 @@ public:
   static Animation DownCast( BaseHandle handle );
 
   /**
-   * @brief Destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Animation();
+  ~Animation();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 6e73a06..1ffa952 100644 (file)
@@ -521,10 +521,11 @@ public:
   static Constraint DownCast( BaseHandle handle );
 
   /**
-   * @brief Destructor.
+   * @brief Destructor
    *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Constraint();
+  ~Constraint();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 4b641c6..452165b 100644 (file)
@@ -74,9 +74,11 @@ public:
   KeyFrames();
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~KeyFrames();
+  ~KeyFrames();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 6c5c75d..d8df880 100644 (file)
@@ -90,11 +90,11 @@ public:
   static bool IsInstalled();
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Stage();
+  ~Stage();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index a2ca4c7..719da30 100644 (file)
@@ -70,11 +70,11 @@ public: // Creation & Destruction
   static GestureDetector DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Dali::GestureDetector is intended as a base class
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~GestureDetector();
+  ~GestureDetector();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 78ee49b..f0d65d8 100644 (file)
@@ -112,11 +112,11 @@ public: // Creation & Destruction
   static LongPressGestureDetector DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~LongPressGestureDetector();
+  ~LongPressGestureDetector();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index ec25a46..4596625 100644 (file)
@@ -119,11 +119,11 @@ public: // Creation & Destruction
   static PanGestureDetector DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~PanGestureDetector();
+  ~PanGestureDetector();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index a7c5773..1e013a4 100644 (file)
@@ -92,11 +92,11 @@ public: // Creation & Destruction
   static PinchGestureDetector DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~PinchGestureDetector();
+  ~PinchGestureDetector();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index a416dba..2c03bf2 100644 (file)
@@ -104,11 +104,11 @@ public: // Creation & Destruction
   static TapGestureDetector DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~TapGestureDetector();
+  ~TapGestureDetector();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 159fd58..88a41eb 100644 (file)
@@ -107,8 +107,10 @@ public:
 
   /**
    * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~AnimatableMesh();
+  ~AnimatableMesh();
 
   /**
    * @brief Get the number of vertices with which this mesh was created.
index 9c7ee5e..5020362 100644 (file)
@@ -189,9 +189,11 @@ public:
   static BitmapImage DownCast( BaseHandle handle );
 
   /**
-   * @brief Destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~BitmapImage();
+  ~BitmapImage();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 45fd7de..6c03275 100644 (file)
@@ -122,7 +122,9 @@ public:
   static EncodedBufferImage DownCast( BaseHandle handle );
 
   /**
-   * @brief Destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
   ~EncodedBufferImage();
 
index d7bf016..5f48065 100644 (file)
@@ -121,9 +121,11 @@ public:
   static FrameBufferImage DownCast( BaseHandle handle );
 
   /**
-   * @brief Destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~FrameBufferImage();
+  ~FrameBufferImage();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 9841302..bca77ff 100644 (file)
@@ -156,11 +156,11 @@ public:
   Image();
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Image();
+  ~Image();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 8f6d1fb..c3850fd 100644 (file)
@@ -100,9 +100,11 @@ public:
   Material();
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Material();
+  ~Material();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index f80df08..51344c4 100644 (file)
@@ -90,9 +90,11 @@ public:
   BaseHandle();
 
   /**
-   * @brief Dali::BaseHandle is intended as a base class.
+   * @brief Dali::BaseHandle is intended as a base class
+   *
+   * This is non-virtual since derived BaseHandle types must not contain data.
    */
-  virtual ~BaseHandle();
+  ~BaseHandle();
 
   /**
    * @brief This copy constructor is required for (smart) pointer semantics.
index a5c6366..73b917a 100644 (file)
@@ -77,9 +77,11 @@ public:
   static Constrainable DownCast( BaseHandle handle );
 
   /**
-   * @brief Dali::Handle is intended as a base class.
+   * @brief Dali::Constrainable is intended as a base class
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Constrainable();
+  ~Constrainable();
 
   /**
    * @brief This copy constructor is required for (smart) pointer semantics.
index 16d6f13..a4cd607 100644 (file)
@@ -90,10 +90,11 @@ public:
   Handle();
 
   /**
-   * @brief Dali::Handle is intended as a base class.
+   * @brief Dali::Handle is intended as a base class
    *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Handle();
+  ~Handle();
 
   /**
    * @brief This copy constructor is required for (smart) pointer semantics.
index 62256c2..f4a0e7e 100644 (file)
@@ -83,9 +83,9 @@ public:
   ObjectRegistry();
 
   /**
-   * @brief Destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
   ~ObjectRegistry();
 
index 0aac0d5..4b74624 100644 (file)
@@ -79,9 +79,11 @@ public:
   static PropertyNotification DownCast( BaseHandle handle );
 
   /**
-   * @brief Destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~PropertyNotification();
+  ~PropertyNotification();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 2a67975..1ff2d10 100644 (file)
@@ -65,9 +65,11 @@ public:
   static RenderTaskList DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~RenderTaskList();
+  ~RenderTaskList();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index f8cf4a8..ebeb7ff 100644 (file)
@@ -150,9 +150,11 @@ public:
   static RenderTask DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~RenderTask();
+  ~RenderTask();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 2b6da62..0625ff0 100644 (file)
@@ -312,11 +312,11 @@ public:
   static ShaderEffect DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~ShaderEffect();
+  ~ShaderEffect();
 
   /**
    * @brief Copy constructor
index 0aac048..b553910 100644 (file)
@@ -185,11 +185,11 @@ public:
   static const std::string GetFamilyForText(const Character& character);
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Font();
+  ~Font();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index f6c1591..a057a78 100644 (file)
@@ -77,11 +77,11 @@ public:
   static LightActor DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~LightActor();
+  ~LightActor();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 8f1e30b..4510937 100644 (file)
@@ -83,9 +83,11 @@ public:
   }
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Light();
+  ~Light();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 83977ad..eb22cce 100644 (file)
@@ -89,9 +89,11 @@ public:
   DynamicsBodyConfig();
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~DynamicsBodyConfig();
+  ~DynamicsBodyConfig();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 5fb76c2..514ceae 100644 (file)
@@ -53,9 +53,11 @@ public:
   DynamicsBody();
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~DynamicsBody();
+  ~DynamicsBody();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 7daa4cd..ba18018 100644 (file)
@@ -48,9 +48,11 @@ public:
   DynamicsCollision();
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~DynamicsCollision();
+  ~DynamicsCollision();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 5e95cb1..350e36d 100644 (file)
@@ -64,9 +64,11 @@ public:
   DynamicsJoint();
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~DynamicsJoint();
+  ~DynamicsJoint();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index ef1c1d8..6c92044 100644 (file)
@@ -116,9 +116,11 @@ public:
   DynamicsShape();
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~DynamicsShape();
+  ~DynamicsShape();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index c5814b8..8bce7c1 100644 (file)
@@ -66,9 +66,11 @@ public:
   DynamicsWorldConfig();
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~DynamicsWorldConfig();
+  ~DynamicsWorldConfig();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index ddcd0d5..8cc957c 100644 (file)
@@ -111,9 +111,11 @@ public:
   DynamicsWorld();
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~DynamicsWorld();
+  ~DynamicsWorld();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 5b9017e..73e77cc 100644 (file)
@@ -66,9 +66,11 @@ public:
   Cloth();
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Cloth();
+  ~Cloth();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 2c3d021..727fb5d 100644 (file)
@@ -57,9 +57,11 @@ public:
   Mesh();
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Mesh();
+  ~Mesh();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index b81f3e0..98c5d22 100644 (file)
@@ -90,9 +90,11 @@ public:
   static bool IsColorGlyph( const Character& character );
 
   /**
-   * @brief Destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~GlyphImage();
+  ~GlyphImage();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index d067726..a02eea8 100644 (file)
@@ -81,9 +81,11 @@ public:
   static NinePatchImage DownCast( BaseHandle handle );
 
   /**
-   * @brief Destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~NinePatchImage();
+  ~NinePatchImage();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index a8b5972..8876e8a 100644 (file)
@@ -89,11 +89,11 @@ public:
   static Entity DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Entity();
+  ~Entity();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index d853a26..06f2a43 100644 (file)
@@ -74,11 +74,11 @@ public:
   static ModelData DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~ModelData();
+  ~ModelData();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 86b59de..aadd7b8 100644 (file)
@@ -88,11 +88,11 @@ public:
   static Model DownCast( BaseHandle handle );
 
   /**
-   * @brief Virtual destructor.
+   * @brief Destructor
    *
-   * Dali::Object derived classes typically do not contain member data.
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~Model();
+  ~Model();
 
   /**
    * @copydoc Dali::BaseHandle::operator=
index 52c04c6..25653ff 100644 (file)
@@ -86,9 +86,11 @@ public:
   TypeInfo();
 
   /**
-   * @brief destructor.
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  virtual ~TypeInfo();
+  ~TypeInfo();
 
   /**
    * @copydoc Dali::BaseHandle::operator=