SlideShare a Scribd company logo
1 of 87
Download to read offline
Object-Centric
                            Reflection
                                Jorge Ressia
                           Software Composition Group




Thursday, August 30, 12
Profiling



Thursday, August 30, 12
Profiling:
           Is the activity of analyzing a program
           execution.




Thursday, August 30, 12
Domain-Sp

                                                           CPU time profiling
                                                           Mondrian [9] is an open and agile visualization engine.
                                                           visualization using a graph of (possibly nested) nodes an




                                                  Profile
                                                           a serious performance issue was raised1 . Tracking down
                                                           performance was not trivial. We first used a standard sam
                                                                Execution sampling approximates the time spent in an
                                                           by periodically stopping a program and recording the cu
                                                           under executions. Such a profiling technique is relatively
                                                           little impact on the overall execution. This sampling techn
                                                           all mainstream profilers, such as JProfiler, YourKit, xprof
                                                                MessageTally, the standard sampling-based profiler in P
                                                           tually describes the execution in terms of CPU consumpt
                                                           each method of Mondrian:
                                                           54.8% {11501ms} MOCanvas>>drawOn:
                                                            54.8% {11501ms} MORoot(MONode)>>displayOn:
                                                             30.9% {6485ms} MONode>>displayOn:
                  {               {                            | 18.1% {3799ms} MOEdge>>displayOn:
                      {                   {                       ...
                                              }                | 8.4% {1763ms} MOEdge>>displayOn:
                          }
                          }
                                                               | | 8.0% {1679ms} MOStraightLineShape>>display:on:
                                                               | | 2.6% {546ms} FormCanvas>>line:to:width:color:
                              }       {       }                  ...
                                                             23.4% {4911ms} MOEdge>>displayOn:
                                                                 ...

                                                              We can observe that the virtual machine spent abou
                                                           the method displayOn: defined in the class MORoot. A ro
                                                           nested node that contains all the nodes of the edges of t
                                                           general profiling information says that rendering nodes a
                                                           great share of the CPU time, but it does not help in pin
                                                           and edges are responsible for the time spent. Not all grap
                                                           consume resources.
                                                              Traditional execution sampling profilers center their r
                                                           the execution stack and completely ignore the identity of th
                                                           the method call and its arguments. As a consequence, it
                                                           which objects cause the slowdown. For the example above,
                                                           says that we spent 30.9% in MONode>>displayOn: withou
                                                           were actually refreshed too often.

                                                           Coverage
                                                           PetitParser is a parsing framework combining ideas from
                                                           parser combinators, parsing expression grammars and pac
                                                           grammars and parsers as objects that can be reconfigured
Thursday, August 30, 12                                    1
                                                               http://forum.world.st/Mondrian-is-slow-next-step-tc
CPU time profiling
                                                          Mondrian [9] is an open and agile visualization engine.




                                                 Profile
                                                          visualization using a graph of (possibly nested) nodes an
                                                          a serious performance issue was raised1 . Tracking down
                                                          performance was not trivial. We first used a standard sam
                                                               Execution sampling approximates the time spent in an
                                                          by periodically stopping a program and recording the cu
                                                          under executions. Such a profiling technique is relatively
                                                          little impact on the overall execution. This sampling techn
                                                          all mainstream profilers, such as JProfiler, YourKit, xprof
                                                               MessageTally, the standard sampling-based profiler in P
                                                          tually describes the execution in terms of CPU consumpt
                                                          each method of Mondrian:
                                                          54.8% {11501ms} MOCanvas>>drawOn:
                                                           54.8% {11501ms} MORoot(MONode)>>displayOn:
                 {               {                          30.9% {6485ms} MONode>>displayOn:
                     {                   {                    | 18.1% {3799ms} MOEdge>>displayOn:
                                             }                   ...
                         }
                         }                                    | 8.4% {1763ms} MOEdge>>displayOn:
                                                              | | 8.0% {1679ms} MOStraightLineShape>>display:on:
                             }       {       }                | | 2.6% {546ms} FormCanvas>>line:to:width:color:
                                                                ...
                                                            23.4% {4911ms} MOEdge>>displayOn:
                                                                ...

                                                             We can observe that the virtual machine spent abou
                                                          the method displayOn: defined in the class MORoot. A ro
                                                          nested node that contains all the nodes of the edges of t
                                                          general profiling information says that rendering nodes a
                                                          great share of the CPU time, but it does not help in pin
                                                          and edges are responsible for the time spent. Not all grap
                                                          consume resources.
                                                             Traditional execution sampling profilers center their r
                                                          the execution stack and completely ignore the identity of th
                                                          the method call and its arguments. As a consequence, it
                                                          which objects cause the slowdown. For the example above,
                                                          says that we spent 30.9% in MONode>>displayOn: withou
                                                          were actually refreshed too often.




                                                 Domain
                                                          Coverage
                                                          PetitParser is a parsing framework combining ideas from
                                                          parser combinators, parsing expression grammars and pac
                                                          grammars and parsers as objects that can be reconfigured
                                                          1
                                                              http://forum.world.st/Mondrian-is-slow-next-step-tc
                                                              a2261116
                                                          2
                                                              http://www.pharo-project.org/




Thursday, August 30, 12
Mondrian



Thursday, August 30, 12
Thursday, August 30, 12
C omp lexity
                            stemand Ducasse 2003
                          Sy zaLan


Thursday, August 30, 12
little impact on the overall execution. This sampling technique is u
                  all mainstream profilers, such as JProfiler, YourKit, xprof [10], an
                       MessageTally, the standard sampling-based profiler in Pharo Sm
                  tually describes the execution in terms of CPU consumption and i
                  each method of Mondrian:
                  54.8% {11501ms} MOCanvas>>drawOn:
                   54.8% {11501ms} MORoot(MONode)>>displayOn:
                    30.9% {6485ms} MONode>>displayOn:
                      | 18.1% {3799ms} MOEdge>>displayOn:
                         ...
                      | 8.4% {1763ms} MOEdge>>displayOn:
                      | | 8.0% {1679ms} MOStraightLineShape>>display:on:
                      | | 2.6% {546ms} FormCanvas>>line:to:width:color:
                        ...
                    23.4% {4911ms} MOEdge>>displayOn:
                        ...

                     We can observe that the virtual machine spent about 54% o
                  the method displayOn: defined in the class MORoot. A root is the
                  nested node that contains all the nodes of the edges of the visua
                  general profiling information says that rendering nodes and edge
                  great share of the CPU time, but it does not help in pinpointing
Thursday, August 30, 12
Domain-Specific Profiling        3

                   CPU time profiling

                                               Which is the relationship?
                   Mondrian [9] is an open and agile visualization engine. Mondrian describes a
                   visualization using a graph of (possibly nested) nodes and edges. In June 2010
                   a serious performance issue was raised1 . Tracking down the cause of the poor
                   performance was not trivial. We first used a standard sample-based profiler.
                        Execution sampling approximates the time spent in an application’s methods
                   by periodically stopping a program and recording the current set of methods
                   under executions. Such a profiling technique is relatively accurate since it has
                   little impact on the overall execution. This sampling technique is used by almost
                   all mainstream profilers, such as JProfiler, YourKit, xprof [10], and hprof.
                        MessageTally, the standard sampling-based profiler in Pharo Smalltalk2 , tex-
                   tually describes the execution in terms of CPU consumption and invocation for
                   each method of Mondrian:
                   54.8% {11501ms} MOCanvas>>drawOn:
                    54.8% {11501ms} MORoot(MONode)>>displayOn:
                     30.9% {6485ms} MONode>>displayOn:




                                                                                       ?
                       | 18.1% {3799ms} MOEdge>>displayOn:
                          ...
                       | 8.4% {1763ms} MOEdge>>displayOn:
                       | | 8.0% {1679ms} MOStraightLineShape>>display:on:
                       | | 2.6% {546ms} FormCanvas>>line:to:width:color:
                         ...
                     23.4% {4911ms} MOEdge>>displayOn:
                         ...

                      We can observe that the virtual machine spent about 54% of its time in
                   the method displayOn: defined in the class MORoot. A root is the unique non-
                   nested node that contains all the nodes of the edges of the visualization. This
                   general profiling information says that rendering nodes and edges consumes a
                   great share of the CPU time, but it does not help in pinpointing which nodes
                   and edges are responsible for the time spent. Not all graphical elements equally
                   consume resources.
                      Traditional execution sampling profilers center their result on the frames of
                   the execution stack and completely ignore the identity of the object that received
                   the method call and its arguments. As a consequence, it is hard to track down
                   which objects cause the slowdown. For the example above, the traditional profiler
                   says that we spent 30.9% in MONode>>displayOn: without saying which nodes
                   were actually refreshed too often.

                   Coverage
                   PetitParser is a parsing framework combining ideas from scannerless parsing,
                   parser combinators, parsing expression grammars and packrat parsers to model
Thursday, August 30, 12
                   grammars and parsers as objects that can be reconfigured dynamically [11].
Debugging



Thursday, August 30, 12
Debugging:
           Is the process of interacting with a
           running software system to test and
           understand its current behavior.




Thursday, August 30, 12
Mondrian



Thursday, August 30, 12
Thursday, August 30, 12
C omp lexity
                            stemand Ducasse 2003
                          Sy zaLan


Thursday, August 30, 12
Rendering



Thursday, August 30, 12
Shape and Nodes



Thursday, August 30, 12
Thursday, August 30, 12
Thursday, August 30, 12
How do we debug
                               this?


Thursday, August 30, 12
Breakpoints



Thursday, August 30, 12
Conditional
                          Breakpoints


Thursday, August 30, 12
{               {
                {                   {
                                        }
                    }
                    }
                        }       {       }




Thursday, August 30, 12
{               {
                {                   {
                                        }
                    }
                    }
                        }       {       }




Thursday, August 30, 12
Developer Questions



Thursday, August 30, 12
When during the execution is this method called? (Q.13)
      Where are instances of this class created? (Q.14)
      Where is this variable or data structure being accessed?
      (Q.15)
      What are the values of the argument at runtime? (Q.19)
      What data is being modified in this code? (Q.20)
      How are these types or objects related? (Q.22)
      How can data be passed to (or accessed at) this point
    in the code? (Q.28)
      What parts of this data structure are accessed in this
    code? (Q.33)



Thursday, August 30, 12
When during the execution is this method called? (Q.13)
      Where are instances of this class created? (Q.14)
      Where is this variable or data structure being accessed?
      (Q.15)
      What are the values of the argument at runtime? (Q.19)
      What data is being modified in this code? (Q.20)
      How are these types or objects related? (Q.22)
      How can data be passed to (or accessed at) this point
    in the code? (Q.28)
      What parts of this data structure are accessed in this
    code? (Q.33)                                   llito
                                                   Si     etal.           g softwar
                                                                                   e
                                                                 ask durin
                                                       gr ammers s. 2008
                                         Questi ons pro ution task
                                                     evol

Thursday, August 30, 12
Which is the relationship?



       When during the execution is this method called? (Q.13)




                                                                                   ?
       Where are instances of this class created? (Q.14)
       Where is this variable or data structure being accessed? (Q.15)
       What are the values of the argument at runtime? (Q.19)
       What data is being modified in this code? (Q.20)
       How are these types or objects related? (Q.22)
       How can data be passed to (or accessed at) this point in the code? (Q.28)
       What parts of this data structure are accessed in this code? (Q.33)




Thursday, August 30, 12
What is the
                          problem?


Thursday, August 30, 12
Traditional
                          Reflection


Thursday, August 30, 12
visualization using a graph of (possibly nested) nodes and edges. In June 2010
     a serious performance issue was raised1 . Tracking down the cause of the poor
     performance was not trivial. We first used a standard sample-based profiler.
          Execution sampling approximates the time spent in an application’s methods
     by periodically stopping a program and recording the current set of methods


                                                         Profiling
     under executions. Such a profiling technique is relatively accurate since it has
     little impact on the overall execution. This sampling technique is used by almost
     all mainstream profilers, such as JProfiler, YourKit, xprof [10], and hprof.
          MessageTally, the standard sampling-based profiler in Pharo Smalltalk2 , tex-
     tually describes the execution in terms of CPU consumption and invocation for
     each method of Mondrian:
     54.8% {11501ms} MOCanvas>>drawOn:
      54.8% {11501ms} MORoot(MONode)>>displayOn:
       30.9% {6485ms} MONode>>displayOn:




                                                                        ?
         | 18.1% {3799ms} MOEdge>>displayOn:
            ...
         | 8.4% {1763ms} MOEdge>>displayOn:
         | | 8.0% {1679ms} MOStraightLineShape>>display:on:
         | | 2.6% {546ms} FormCanvas>>line:to:width:color:
           ...
       23.4% {4911ms} MOEdge>>displayOn:
           ...

        We can observe that the virtual machine spent about 54% of its time in
     the method displayOn: defined in the class MORoot. A root is the unique non-
     nested node that contains all the nodes of the edges of the visualization. This
     general profiling information says that rendering nodes and edges consumes a
     great share of the CPU time, but it does not help in pinpointing which nodes
     and edges are responsible for the time spent. Not all graphical elements equally
     consume resources.
        Traditional execution sampling profilers center their result on the frames of
     the execution stack and completely ignore the identity of the object that received
     the method call and its arguments. As a consequence, it is hard to track down
     which objects cause the slowdown. For the example above, the traditional profiler
     says that we spent 30.9% in MONode>>displayOn: without saying which nodes
     were actually refreshed too often.

     Coverage
     PetitParser is
Thursday, August 30, 12   a parsing framework combining ideas from scannerless parsing,
Debugging


       When during the execution is this method called? (Q.13)




                                                                                   ?
       Where are instances of this class created? (Q.14)
       Where is this variable or data structure being accessed? (Q.15)
       What are the values of the argument at runtime? (Q.19)
       What data is being modified in this code? (Q.20)
       How are these types or objects related? (Q.22)
       How can data be passed to (or accessed at) this point in the code? (Q.28)
       What parts of this data structure are accessed in this code? (Q.33)




Thursday, August 30, 12
Object Paradox



Thursday, August 30, 12
Object-Centric
                           Reflection


Thursday, August 30, 12
Thursday, August 30, 12
Organize the
                           Meta-level


Thursday, August 30, 12
Explicit
                          Meta-objects


Thursday, August 30, 12
Class

                                    Meta-object




                           Object



Thursday, August 30, 12
Class

                                    Meta-object




                           Object



Thursday, August 30, 12
Class

                                      Meta-object




                          Evolved Object



Thursday, August 30, 12
Debugging    Profiling




                          Execution    Structure
                          Reification   Evolution



Thursday, August 30, 12
Debugging    Profiling




                          Execution    Structure
                          Reification   Evolution



Thursday, August 30, 12
Object-Centric
                           Debugging


Thursday, August 30, 12
Object-Centric
                           Debugging
                                                   2
                                              201Nierstrasz
                                         ICSE    .
                                                      rgel and
                                                               O
                                  J. Ressi   a, A, Be


Thursday, August 30, 12
{               {
                {                   {
                                        }
                    }
                    }
                        }       {       }




Thursday, August 30, 12
{               {
                {                   {
                                        }
                    }
                    }
                        }       {       }




Thursday, August 30, 12
{               {
                              {                   {
                                                      }
                                  }
                                  }
                                      }       {       }




Thursday, August 30, 12
Thursday, August 30, 12
Thursday, August 30, 12
Thursday, August 30, 12
stack-centric debugging


                                             InstructionStream class>>on:
                                             InstructionStream class>>new
                                             InstructionStream>>initialize
                               step into,    CompiledMethod>>initialPC
                               step over,    InstructionStream>>method:pc:
                                resume       InstructionStream>>nextInstruction
                                             MessageCatcher class>>new
                                             InstructionStream>>interpretNextInstructionFor:
                                             ...

                                                        object-centric debugging

                                  centered on                           centered on
                          the InstructionStream class          the InstructionStream object
                                                                         initialize
                                            on:
                          next message,                  next message, method:pc:
                                            new           next change nextInstruction                 ...
                           next change
                                                                       interpretNextInstructionFor:
                                                                       ...




Thursday, August 30, 12
Mondrian



Thursday, August 30, 12
Shape and Nodes



Thursday, August 30, 12
Thursday, August 30, 12
Thursday, August 30, 12
halt on object in
                                 call


Thursday, August 30, 12
Halt on next message
 Halt on next message/s named
 Halt on state change
 Halt on state change named
 Halt on next inherited message
 Halt on next overloaded message
 Halt on object/s in call
 Halt on next message from
 package
Thursday, August 30, 12
Debugging    Profiling




                          Execution    Structure
                          Reification   Evolution



Thursday, August 30, 12
MetaSpy



Thursday, August 30, 12
MetaSpy

                                    OLS 2011
                               TO   Ber gel etal.



Thursday, August 30, 12
Mondrian Profiler



Thursday, August 30, 12
Thursday, August 30, 12
C omp lexity
                            stema, Ducasse 2003
                          Sy anz L


Thursday, August 30, 12
Thursday, August 30, 12
Debugging    Profiling




                          Execution    Structure
                          Reification   Evolution



Thursday, August 30, 12
What if we do not
              know what to evolve?


Thursday, August 30, 12
Thursday, August 30, 12
?
Thursday, August 30, 12
Prisma


Thursday, August 30, 12
Thursday, August 30, 12
Thursday, August 30, 12
Thursday, August 30, 12
Thursday, August 30, 12
Thursday, August 30, 12
Back in time
                           Debugger


Thursday, August 30, 12
Back in time
                           Debugger

                                                        Debu gger
                                              w
                                           Floal. ECOOP 2008
                                O   b ject  nhard e
                                                    t
                                        Lie


Thursday, August 30, 12
name                        value
                                                           init@t1                    null
                                                               predecessor

                                                 name                        value
                                :Person                 field-write@t2                'Doe'
                                                               predecessor
                                                 name
                                                                             value
                                                        field-write@t3                'Smith'
                          person := Person new   t1
                          ...
                          name := 'Doe'          t2
                          ...
                          name := 'Smith'        t3




Thursday, August 30, 12
Debugging    Profiling




                          Execution    Structure
                          Reification   Evolution



Thursday, August 30, 12
Talents


                          scg.unibe.ch/research/talents

Thursday, August 30, 12
Talents
                                                             ST 2 011F. Perin and
                                                      IW                ie rstrasz,
                                                            îr ba, O. N gli
                                           J. Re ssia, T. G        L. Reng


                          scg.unibe.ch/research/talents

Thursday, August 30, 12
Dynamically
                   composable units of
                        reuse


Thursday, August 30, 12
Streams



Thursday, August 30, 12
scg.unibe.ch/research/bifrost



Thursday, August 30, 12
Object-
                           Centric       Prisma
                          Debugger


                          Subjectopia   MetaSpy



                            Talents     Chameleon

Thursday, August 30, 12
scg.unibe.ch/jenkins/


Thursday, August 30, 12
Alexandre              Marcus   Stéphane     Oscar
           Bergel               Denker   Ducasse    Nierstrasz




                       Lukas        Tudor       Fabrizio
                      Renggli       Gîrba        Perin
Thursday, August 30, 12
scg.unibe.ch/research/bifrost



Thursday, August 30, 12

More Related Content

Viewers also liked

IWST12: Spec
IWST12: SpecIWST12: Spec
IWST12: SpecESUG
 
Across 31 Years
Across 31 YearsAcross 31 Years
Across 31 YearsESUG
 
Smalltalk In the Cloud
Smalltalk In the CloudSmalltalk In the Cloud
Smalltalk In the CloudESUG
 
Welcome ghent
Welcome ghentWelcome ghent
Welcome ghentESUG
 
Object Centric Profiling
Object Centric ProfilingObject Centric Profiling
Object Centric ProfilingESUG
 
Continuous Integration: a practical approach
Continuous Integration: a practical approachContinuous Integration: a practical approach
Continuous Integration: a practical approachESUG
 
Zinc WebSockets
Zinc WebSocketsZinc WebSockets
Zinc WebSocketsESUG
 

Viewers also liked (7)

IWST12: Spec
IWST12: SpecIWST12: Spec
IWST12: Spec
 
Across 31 Years
Across 31 YearsAcross 31 Years
Across 31 Years
 
Smalltalk In the Cloud
Smalltalk In the CloudSmalltalk In the Cloud
Smalltalk In the Cloud
 
Welcome ghent
Welcome ghentWelcome ghent
Welcome ghent
 
Object Centric Profiling
Object Centric ProfilingObject Centric Profiling
Object Centric Profiling
 
Continuous Integration: a practical approach
Continuous Integration: a practical approachContinuous Integration: a practical approach
Continuous Integration: a practical approach
 
Zinc WebSockets
Zinc WebSocketsZinc WebSockets
Zinc WebSockets
 

Similar to Object Centric Reflection

FACE COUNTING USING OPEN CV & PYTHON FOR ANALYZING UNUSUAL EVENTS IN CROWDS
FACE COUNTING USING OPEN CV & PYTHON FOR ANALYZING UNUSUAL EVENTS IN CROWDSFACE COUNTING USING OPEN CV & PYTHON FOR ANALYZING UNUSUAL EVENTS IN CROWDS
FACE COUNTING USING OPEN CV & PYTHON FOR ANALYZING UNUSUAL EVENTS IN CROWDSIRJET Journal
 
Producer consumer-problems
Producer consumer-problemsProducer consumer-problems
Producer consumer-problemsRichard Ashworth
 
Orthogonal Matching Pursuit in 2D for Java with GPGPU Prospectives
Orthogonal Matching Pursuit in 2D for Java with GPGPU ProspectivesOrthogonal Matching Pursuit in 2D for Java with GPGPU Prospectives
Orthogonal Matching Pursuit in 2D for Java with GPGPU ProspectivesMatt Simons
 
1 Vampir Overview
1 Vampir Overview1 Vampir Overview
1 Vampir OverviewPTIHPA
 
Crash course on data streaming (with examples using Apache Flink)
Crash course on data streaming (with examples using Apache Flink)Crash course on data streaming (with examples using Apache Flink)
Crash course on data streaming (with examples using Apache Flink)Vincenzo Gulisano
 
Devops presentation
Devops presentationDevops presentation
Devops presentationk9ert
 
Distributed Traffic management framework
Distributed Traffic management frameworkDistributed Traffic management framework
Distributed Traffic management frameworkSaurabh Nambiar
 
Thesis Report - Gaurav Raina MSc ES - v2
Thesis Report - Gaurav Raina MSc ES - v2Thesis Report - Gaurav Raina MSc ES - v2
Thesis Report - Gaurav Raina MSc ES - v2Gaurav Raina
 
Deep Convolutional Neural Network acceleration on the Intel Xeon Phi
Deep Convolutional Neural Network acceleration on the Intel Xeon PhiDeep Convolutional Neural Network acceleration on the Intel Xeon Phi
Deep Convolutional Neural Network acceleration on the Intel Xeon PhiGaurav Raina
 
Deep Convolutional Network evaluation on the Intel Xeon Phi
Deep Convolutional Network evaluation on the Intel Xeon PhiDeep Convolutional Network evaluation on the Intel Xeon Phi
Deep Convolutional Network evaluation on the Intel Xeon PhiGaurav Raina
 
A Novel Evaluation Methodology To Obtain Fair Measurements In Multithreaded A...
A Novel Evaluation Methodology To Obtain Fair Measurements In Multithreaded A...A Novel Evaluation Methodology To Obtain Fair Measurements In Multithreaded A...
A Novel Evaluation Methodology To Obtain Fair Measurements In Multithreaded A...Tracy Drey
 
Bridging Concepts and Practice in eScience via Simulation-driven Engineering
Bridging Concepts and Practice in eScience via Simulation-driven EngineeringBridging Concepts and Practice in eScience via Simulation-driven Engineering
Bridging Concepts and Practice in eScience via Simulation-driven EngineeringRafael Ferreira da Silva
 
Cloud Module 3 .pptx
Cloud Module 3 .pptxCloud Module 3 .pptx
Cloud Module 3 .pptxssuser41d319
 
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)mfrancis
 

Similar to Object Centric Reflection (20)

36575
3657536575
36575
 
FACE COUNTING USING OPEN CV & PYTHON FOR ANALYZING UNUSUAL EVENTS IN CROWDS
FACE COUNTING USING OPEN CV & PYTHON FOR ANALYZING UNUSUAL EVENTS IN CROWDSFACE COUNTING USING OPEN CV & PYTHON FOR ANALYZING UNUSUAL EVENTS IN CROWDS
FACE COUNTING USING OPEN CV & PYTHON FOR ANALYZING UNUSUAL EVENTS IN CROWDS
 
Producer consumer-problems
Producer consumer-problemsProducer consumer-problems
Producer consumer-problems
 
Orthogonal Matching Pursuit in 2D for Java with GPGPU Prospectives
Orthogonal Matching Pursuit in 2D for Java with GPGPU ProspectivesOrthogonal Matching Pursuit in 2D for Java with GPGPU Prospectives
Orthogonal Matching Pursuit in 2D for Java with GPGPU Prospectives
 
1 Vampir Overview
1 Vampir Overview1 Vampir Overview
1 Vampir Overview
 
Crash course on data streaming (with examples using Apache Flink)
Crash course on data streaming (with examples using Apache Flink)Crash course on data streaming (with examples using Apache Flink)
Crash course on data streaming (with examples using Apache Flink)
 
Devops presentation
Devops presentationDevops presentation
Devops presentation
 
Distributed Traffic management framework
Distributed Traffic management frameworkDistributed Traffic management framework
Distributed Traffic management framework
 
KHAN_FAHAD_FL14
KHAN_FAHAD_FL14KHAN_FAHAD_FL14
KHAN_FAHAD_FL14
 
Thesis Report - Gaurav Raina MSc ES - v2
Thesis Report - Gaurav Raina MSc ES - v2Thesis Report - Gaurav Raina MSc ES - v2
Thesis Report - Gaurav Raina MSc ES - v2
 
Deep Convolutional Neural Network acceleration on the Intel Xeon Phi
Deep Convolutional Neural Network acceleration on the Intel Xeon PhiDeep Convolutional Neural Network acceleration on the Intel Xeon Phi
Deep Convolutional Neural Network acceleration on the Intel Xeon Phi
 
Deep Convolutional Network evaluation on the Intel Xeon Phi
Deep Convolutional Network evaluation on the Intel Xeon PhiDeep Convolutional Network evaluation on the Intel Xeon Phi
Deep Convolutional Network evaluation on the Intel Xeon Phi
 
markomanolis_phd_defense
markomanolis_phd_defensemarkomanolis_phd_defense
markomanolis_phd_defense
 
A Novel Evaluation Methodology To Obtain Fair Measurements In Multithreaded A...
A Novel Evaluation Methodology To Obtain Fair Measurements In Multithreaded A...A Novel Evaluation Methodology To Obtain Fair Measurements In Multithreaded A...
A Novel Evaluation Methodology To Obtain Fair Measurements In Multithreaded A...
 
Thesis_Report
Thesis_ReportThesis_Report
Thesis_Report
 
Bridging Concepts and Practice in eScience via Simulation-driven Engineering
Bridging Concepts and Practice in eScience via Simulation-driven EngineeringBridging Concepts and Practice in eScience via Simulation-driven Engineering
Bridging Concepts and Practice in eScience via Simulation-driven Engineering
 
Hadoop at JavaZone 2010
Hadoop at JavaZone 2010Hadoop at JavaZone 2010
Hadoop at JavaZone 2010
 
Cloud Module 3 .pptx
Cloud Module 3 .pptxCloud Module 3 .pptx
Cloud Module 3 .pptx
 
Benchmarking PyCon AU 2011 v0
Benchmarking PyCon AU 2011 v0Benchmarking PyCon AU 2011 v0
Benchmarking PyCon AU 2011 v0
 
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
OSG(a)i: because AI needs a runtime - Tim Verbelen (imec)
 

More from ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

More from ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Recently uploaded

Where developers are challenged, what developers want and where DevEx is going
Where developers are challenged, what developers want and where DevEx is goingWhere developers are challenged, what developers want and where DevEx is going
Where developers are challenged, what developers want and where DevEx is goingFrancesco Corti
 
March Patch Tuesday
March Patch TuesdayMarch Patch Tuesday
March Patch TuesdayIvanti
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightSafe Software
 
Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...DianaGray10
 
LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0DanBrown980551
 
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENTSIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENTxtailishbaloch
 
Introduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its applicationIntroduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its applicationKnoldus Inc.
 
UiPath Studio Web workshop series - Day 1
UiPath Studio Web workshop series  - Day 1UiPath Studio Web workshop series  - Day 1
UiPath Studio Web workshop series - Day 1DianaGray10
 
3 Pitfalls Everyone Should Avoid with Cloud Data
3 Pitfalls Everyone Should Avoid with Cloud Data3 Pitfalls Everyone Should Avoid with Cloud Data
3 Pitfalls Everyone Should Avoid with Cloud DataEric D. Schabell
 
2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdf2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdfThe Good Food Institute
 
UiPath Studio Web workshop series - Day 2
UiPath Studio Web workshop series - Day 2UiPath Studio Web workshop series - Day 2
UiPath Studio Web workshop series - Day 2DianaGray10
 
AI Workshops at Computers In Libraries 2024
AI Workshops at Computers In Libraries 2024AI Workshops at Computers In Libraries 2024
AI Workshops at Computers In Libraries 2024Brian Pichman
 
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdfQ4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdfTejal81
 
Introduction - IPLOOK NETWORKS CO., LTD.
Introduction - IPLOOK NETWORKS CO., LTD.Introduction - IPLOOK NETWORKS CO., LTD.
Introduction - IPLOOK NETWORKS CO., LTD.IPLOOK Networks
 
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptxEmil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptxNeo4j
 
Scenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenariosScenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenariosErol GIRAUDY
 
Trailblazer Community - Flows Workshop (Session 2)
Trailblazer Community - Flows Workshop (Session 2)Trailblazer Community - Flows Workshop (Session 2)
Trailblazer Community - Flows Workshop (Session 2)Muhammad Tiham Siddiqui
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
 
EMEA What is ThousandEyes? Webinar
EMEA What is ThousandEyes? WebinarEMEA What is ThousandEyes? Webinar
EMEA What is ThousandEyes? WebinarThousandEyes
 
Planetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile BrochurePlanetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile BrochurePlanetek Italia Srl
 

Recently uploaded (20)

Where developers are challenged, what developers want and where DevEx is going
Where developers are challenged, what developers want and where DevEx is goingWhere developers are challenged, what developers want and where DevEx is going
Where developers are challenged, what developers want and where DevEx is going
 
March Patch Tuesday
March Patch TuesdayMarch Patch Tuesday
March Patch Tuesday
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and Insight
 
Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...
 
LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0
 
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENTSIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
 
Introduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its applicationIntroduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its application
 
UiPath Studio Web workshop series - Day 1
UiPath Studio Web workshop series  - Day 1UiPath Studio Web workshop series  - Day 1
UiPath Studio Web workshop series - Day 1
 
3 Pitfalls Everyone Should Avoid with Cloud Data
3 Pitfalls Everyone Should Avoid with Cloud Data3 Pitfalls Everyone Should Avoid with Cloud Data
3 Pitfalls Everyone Should Avoid with Cloud Data
 
2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdf2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdf
 
UiPath Studio Web workshop series - Day 2
UiPath Studio Web workshop series - Day 2UiPath Studio Web workshop series - Day 2
UiPath Studio Web workshop series - Day 2
 
AI Workshops at Computers In Libraries 2024
AI Workshops at Computers In Libraries 2024AI Workshops at Computers In Libraries 2024
AI Workshops at Computers In Libraries 2024
 
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdfQ4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
Q4 2023 Quarterly Investor Presentation - FINAL - v1.pdf
 
Introduction - IPLOOK NETWORKS CO., LTD.
Introduction - IPLOOK NETWORKS CO., LTD.Introduction - IPLOOK NETWORKS CO., LTD.
Introduction - IPLOOK NETWORKS CO., LTD.
 
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptxEmil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
 
Scenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenariosScenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenarios
 
Trailblazer Community - Flows Workshop (Session 2)
Trailblazer Community - Flows Workshop (Session 2)Trailblazer Community - Flows Workshop (Session 2)
Trailblazer Community - Flows Workshop (Session 2)
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
EMEA What is ThousandEyes? Webinar
EMEA What is ThousandEyes? WebinarEMEA What is ThousandEyes? Webinar
EMEA What is ThousandEyes? Webinar
 
Planetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile BrochurePlanetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile Brochure
 

Object Centric Reflection

  • 1. Object-Centric Reflection Jorge Ressia Software Composition Group Thursday, August 30, 12
  • 3. Profiling: Is the activity of analyzing a program execution. Thursday, August 30, 12
  • 4. Domain-Sp CPU time profiling Mondrian [9] is an open and agile visualization engine. visualization using a graph of (possibly nested) nodes an Profile a serious performance issue was raised1 . Tracking down performance was not trivial. We first used a standard sam Execution sampling approximates the time spent in an by periodically stopping a program and recording the cu under executions. Such a profiling technique is relatively little impact on the overall execution. This sampling techn all mainstream profilers, such as JProfiler, YourKit, xprof MessageTally, the standard sampling-based profiler in P tually describes the execution in terms of CPU consumpt each method of Mondrian: 54.8% {11501ms} MOCanvas>>drawOn: 54.8% {11501ms} MORoot(MONode)>>displayOn: 30.9% {6485ms} MONode>>displayOn: { { | 18.1% {3799ms} MOEdge>>displayOn: { { ... } | 8.4% {1763ms} MOEdge>>displayOn: } } | | 8.0% {1679ms} MOStraightLineShape>>display:on: | | 2.6% {546ms} FormCanvas>>line:to:width:color: } { } ... 23.4% {4911ms} MOEdge>>displayOn: ... We can observe that the virtual machine spent abou the method displayOn: defined in the class MORoot. A ro nested node that contains all the nodes of the edges of t general profiling information says that rendering nodes a great share of the CPU time, but it does not help in pin and edges are responsible for the time spent. Not all grap consume resources. Traditional execution sampling profilers center their r the execution stack and completely ignore the identity of th the method call and its arguments. As a consequence, it which objects cause the slowdown. For the example above, says that we spent 30.9% in MONode>>displayOn: withou were actually refreshed too often. Coverage PetitParser is a parsing framework combining ideas from parser combinators, parsing expression grammars and pac grammars and parsers as objects that can be reconfigured Thursday, August 30, 12 1 http://forum.world.st/Mondrian-is-slow-next-step-tc
  • 5. CPU time profiling Mondrian [9] is an open and agile visualization engine. Profile visualization using a graph of (possibly nested) nodes an a serious performance issue was raised1 . Tracking down performance was not trivial. We first used a standard sam Execution sampling approximates the time spent in an by periodically stopping a program and recording the cu under executions. Such a profiling technique is relatively little impact on the overall execution. This sampling techn all mainstream profilers, such as JProfiler, YourKit, xprof MessageTally, the standard sampling-based profiler in P tually describes the execution in terms of CPU consumpt each method of Mondrian: 54.8% {11501ms} MOCanvas>>drawOn: 54.8% {11501ms} MORoot(MONode)>>displayOn: { { 30.9% {6485ms} MONode>>displayOn: { { | 18.1% {3799ms} MOEdge>>displayOn: } ... } } | 8.4% {1763ms} MOEdge>>displayOn: | | 8.0% {1679ms} MOStraightLineShape>>display:on: } { } | | 2.6% {546ms} FormCanvas>>line:to:width:color: ... 23.4% {4911ms} MOEdge>>displayOn: ... We can observe that the virtual machine spent abou the method displayOn: defined in the class MORoot. A ro nested node that contains all the nodes of the edges of t general profiling information says that rendering nodes a great share of the CPU time, but it does not help in pin and edges are responsible for the time spent. Not all grap consume resources. Traditional execution sampling profilers center their r the execution stack and completely ignore the identity of th the method call and its arguments. As a consequence, it which objects cause the slowdown. For the example above, says that we spent 30.9% in MONode>>displayOn: withou were actually refreshed too often. Domain Coverage PetitParser is a parsing framework combining ideas from parser combinators, parsing expression grammars and pac grammars and parsers as objects that can be reconfigured 1 http://forum.world.st/Mondrian-is-slow-next-step-tc a2261116 2 http://www.pharo-project.org/ Thursday, August 30, 12
  • 8. C omp lexity stemand Ducasse 2003 Sy zaLan Thursday, August 30, 12
  • 9. little impact on the overall execution. This sampling technique is u all mainstream profilers, such as JProfiler, YourKit, xprof [10], an MessageTally, the standard sampling-based profiler in Pharo Sm tually describes the execution in terms of CPU consumption and i each method of Mondrian: 54.8% {11501ms} MOCanvas>>drawOn: 54.8% {11501ms} MORoot(MONode)>>displayOn: 30.9% {6485ms} MONode>>displayOn: | 18.1% {3799ms} MOEdge>>displayOn: ... | 8.4% {1763ms} MOEdge>>displayOn: | | 8.0% {1679ms} MOStraightLineShape>>display:on: | | 2.6% {546ms} FormCanvas>>line:to:width:color: ... 23.4% {4911ms} MOEdge>>displayOn: ... We can observe that the virtual machine spent about 54% o the method displayOn: defined in the class MORoot. A root is the nested node that contains all the nodes of the edges of the visua general profiling information says that rendering nodes and edge great share of the CPU time, but it does not help in pinpointing Thursday, August 30, 12
  • 10. Domain-Specific Profiling 3 CPU time profiling Which is the relationship? Mondrian [9] is an open and agile visualization engine. Mondrian describes a visualization using a graph of (possibly nested) nodes and edges. In June 2010 a serious performance issue was raised1 . Tracking down the cause of the poor performance was not trivial. We first used a standard sample-based profiler. Execution sampling approximates the time spent in an application’s methods by periodically stopping a program and recording the current set of methods under executions. Such a profiling technique is relatively accurate since it has little impact on the overall execution. This sampling technique is used by almost all mainstream profilers, such as JProfiler, YourKit, xprof [10], and hprof. MessageTally, the standard sampling-based profiler in Pharo Smalltalk2 , tex- tually describes the execution in terms of CPU consumption and invocation for each method of Mondrian: 54.8% {11501ms} MOCanvas>>drawOn: 54.8% {11501ms} MORoot(MONode)>>displayOn: 30.9% {6485ms} MONode>>displayOn: ? | 18.1% {3799ms} MOEdge>>displayOn: ... | 8.4% {1763ms} MOEdge>>displayOn: | | 8.0% {1679ms} MOStraightLineShape>>display:on: | | 2.6% {546ms} FormCanvas>>line:to:width:color: ... 23.4% {4911ms} MOEdge>>displayOn: ... We can observe that the virtual machine spent about 54% of its time in the method displayOn: defined in the class MORoot. A root is the unique non- nested node that contains all the nodes of the edges of the visualization. This general profiling information says that rendering nodes and edges consumes a great share of the CPU time, but it does not help in pinpointing which nodes and edges are responsible for the time spent. Not all graphical elements equally consume resources. Traditional execution sampling profilers center their result on the frames of the execution stack and completely ignore the identity of the object that received the method call and its arguments. As a consequence, it is hard to track down which objects cause the slowdown. For the example above, the traditional profiler says that we spent 30.9% in MONode>>displayOn: without saying which nodes were actually refreshed too often. Coverage PetitParser is a parsing framework combining ideas from scannerless parsing, parser combinators, parsing expression grammars and packrat parsers to model Thursday, August 30, 12 grammars and parsers as objects that can be reconfigured dynamically [11].
  • 12. Debugging: Is the process of interacting with a running software system to test and understand its current behavior. Thursday, August 30, 12
  • 15. C omp lexity stemand Ducasse 2003 Sy zaLan Thursday, August 30, 12
  • 17. Shape and Nodes Thursday, August 30, 12
  • 20. How do we debug this? Thursday, August 30, 12
  • 22. Conditional Breakpoints Thursday, August 30, 12
  • 23. { { { { } } } } { } Thursday, August 30, 12
  • 24. { { { { } } } } { } Thursday, August 30, 12
  • 26. When during the execution is this method called? (Q.13) Where are instances of this class created? (Q.14) Where is this variable or data structure being accessed? (Q.15) What are the values of the argument at runtime? (Q.19) What data is being modified in this code? (Q.20) How are these types or objects related? (Q.22) How can data be passed to (or accessed at) this point in the code? (Q.28) What parts of this data structure are accessed in this code? (Q.33) Thursday, August 30, 12
  • 27. When during the execution is this method called? (Q.13) Where are instances of this class created? (Q.14) Where is this variable or data structure being accessed? (Q.15) What are the values of the argument at runtime? (Q.19) What data is being modified in this code? (Q.20) How are these types or objects related? (Q.22) How can data be passed to (or accessed at) this point in the code? (Q.28) What parts of this data structure are accessed in this code? (Q.33) llito Si etal. g softwar e ask durin gr ammers s. 2008 Questi ons pro ution task evol Thursday, August 30, 12
  • 28. Which is the relationship? When during the execution is this method called? (Q.13) ? Where are instances of this class created? (Q.14) Where is this variable or data structure being accessed? (Q.15) What are the values of the argument at runtime? (Q.19) What data is being modified in this code? (Q.20) How are these types or objects related? (Q.22) How can data be passed to (or accessed at) this point in the code? (Q.28) What parts of this data structure are accessed in this code? (Q.33) Thursday, August 30, 12
  • 29. What is the problem? Thursday, August 30, 12
  • 30. Traditional Reflection Thursday, August 30, 12
  • 31. visualization using a graph of (possibly nested) nodes and edges. In June 2010 a serious performance issue was raised1 . Tracking down the cause of the poor performance was not trivial. We first used a standard sample-based profiler. Execution sampling approximates the time spent in an application’s methods by periodically stopping a program and recording the current set of methods Profiling under executions. Such a profiling technique is relatively accurate since it has little impact on the overall execution. This sampling technique is used by almost all mainstream profilers, such as JProfiler, YourKit, xprof [10], and hprof. MessageTally, the standard sampling-based profiler in Pharo Smalltalk2 , tex- tually describes the execution in terms of CPU consumption and invocation for each method of Mondrian: 54.8% {11501ms} MOCanvas>>drawOn: 54.8% {11501ms} MORoot(MONode)>>displayOn: 30.9% {6485ms} MONode>>displayOn: ? | 18.1% {3799ms} MOEdge>>displayOn: ... | 8.4% {1763ms} MOEdge>>displayOn: | | 8.0% {1679ms} MOStraightLineShape>>display:on: | | 2.6% {546ms} FormCanvas>>line:to:width:color: ... 23.4% {4911ms} MOEdge>>displayOn: ... We can observe that the virtual machine spent about 54% of its time in the method displayOn: defined in the class MORoot. A root is the unique non- nested node that contains all the nodes of the edges of the visualization. This general profiling information says that rendering nodes and edges consumes a great share of the CPU time, but it does not help in pinpointing which nodes and edges are responsible for the time spent. Not all graphical elements equally consume resources. Traditional execution sampling profilers center their result on the frames of the execution stack and completely ignore the identity of the object that received the method call and its arguments. As a consequence, it is hard to track down which objects cause the slowdown. For the example above, the traditional profiler says that we spent 30.9% in MONode>>displayOn: without saying which nodes were actually refreshed too often. Coverage PetitParser is Thursday, August 30, 12 a parsing framework combining ideas from scannerless parsing,
  • 32. Debugging When during the execution is this method called? (Q.13) ? Where are instances of this class created? (Q.14) Where is this variable or data structure being accessed? (Q.15) What are the values of the argument at runtime? (Q.19) What data is being modified in this code? (Q.20) How are these types or objects related? (Q.22) How can data be passed to (or accessed at) this point in the code? (Q.28) What parts of this data structure are accessed in this code? (Q.33) Thursday, August 30, 12
  • 34. Object-Centric Reflection Thursday, August 30, 12
  • 36. Organize the Meta-level Thursday, August 30, 12
  • 37. Explicit Meta-objects Thursday, August 30, 12
  • 38. Class Meta-object Object Thursday, August 30, 12
  • 39. Class Meta-object Object Thursday, August 30, 12
  • 40. Class Meta-object Evolved Object Thursday, August 30, 12
  • 41. Debugging Profiling Execution Structure Reification Evolution Thursday, August 30, 12
  • 42. Debugging Profiling Execution Structure Reification Evolution Thursday, August 30, 12
  • 43. Object-Centric Debugging Thursday, August 30, 12
  • 44. Object-Centric Debugging 2 201Nierstrasz ICSE . rgel and O J. Ressi a, A, Be Thursday, August 30, 12
  • 45. { { { { } } } } { } Thursday, August 30, 12
  • 46. { { { { } } } } { } Thursday, August 30, 12
  • 47. { { { { } } } } { } Thursday, August 30, 12
  • 51. stack-centric debugging InstructionStream class>>on: InstructionStream class>>new InstructionStream>>initialize step into, CompiledMethod>>initialPC step over, InstructionStream>>method:pc: resume InstructionStream>>nextInstruction MessageCatcher class>>new InstructionStream>>interpretNextInstructionFor: ... object-centric debugging centered on centered on the InstructionStream class the InstructionStream object initialize on: next message, next message, method:pc: new next change nextInstruction ... next change interpretNextInstructionFor: ... Thursday, August 30, 12
  • 53. Shape and Nodes Thursday, August 30, 12
  • 56. halt on object in call Thursday, August 30, 12
  • 57. Halt on next message Halt on next message/s named Halt on state change Halt on state change named Halt on next inherited message Halt on next overloaded message Halt on object/s in call Halt on next message from package Thursday, August 30, 12
  • 58. Debugging Profiling Execution Structure Reification Evolution Thursday, August 30, 12
  • 60. MetaSpy OLS 2011 TO Ber gel etal. Thursday, August 30, 12
  • 63. C omp lexity stema, Ducasse 2003 Sy anz L Thursday, August 30, 12
  • 65. Debugging Profiling Execution Structure Reification Evolution Thursday, August 30, 12
  • 66. What if we do not know what to evolve? Thursday, August 30, 12
  • 75. Back in time Debugger Thursday, August 30, 12
  • 76. Back in time Debugger Debu gger w Floal. ECOOP 2008 O b ject nhard e t Lie Thursday, August 30, 12
  • 77. name value init@t1 null predecessor name value :Person field-write@t2 'Doe' predecessor name value field-write@t3 'Smith' person := Person new t1 ... name := 'Doe' t2 ... name := 'Smith' t3 Thursday, August 30, 12
  • 78. Debugging Profiling Execution Structure Reification Evolution Thursday, August 30, 12
  • 79. Talents scg.unibe.ch/research/talents Thursday, August 30, 12
  • 80. Talents ST 2 011F. Perin and IW ie rstrasz, îr ba, O. N gli J. Re ssia, T. G L. Reng scg.unibe.ch/research/talents Thursday, August 30, 12
  • 81. Dynamically composable units of reuse Thursday, August 30, 12
  • 84. Object- Centric Prisma Debugger Subjectopia MetaSpy Talents Chameleon Thursday, August 30, 12
  • 86. Alexandre Marcus Stéphane Oscar Bergel Denker Ducasse Nierstrasz Lukas Tudor Fabrizio Renggli Gîrba Perin Thursday, August 30, 12