/**
  * Get the relative duration of this event, this will subtract the duration of sub-events. If the
  * event is still active, the duration up till this point in time is returned, else it's the
  * duration from {@link #start()} till {@link #stop()}'
  *
  * @return The relative duration of this event
  */
 public long getDuration() {
   long delta = 0;
   for (PageEvent e : getSubEvents()) {
     delta += e.getDuration();
   }
   return getDurationAbsolute() - delta;
 }
 public List<PageEvent> getSubEventsRecursive() {
   if (mSubEvents.isEmpty()) {
     return mSubEvents;
   }
   ArrayList<PageEvent> tmp = new ArrayList<PageEvent>(mSubEvents);
   for (PageEvent e : mSubEvents) {
     tmp.addAll(e.getSubEventsRecursive());
   }
   return tmp;
 }
 public void reset() {
   mStarted = false;
   mStopped = false;
   mStart = 0;
   mStop = 0;
   for (PageEvent e : mSubEvents) {
     e.reset();
   }
   mSubEvents.clear();
 }