code: public function start($tags, $timestamp)
      {
          // check the provided arguments
          if (!is_numeric($timestamp) || $timestamp < 0) {
              throw new InvalidDataException('start() needs a valid timestamp!');
          }
          
          // extract the TimePoint identification from the provided item, and find existing range
          $range = $this->getRange($tags);
  
          // validate the data consistence
          if ($this->isRangeOpen($range)) {
              // unclosed range found, auto closing
              // auto generate the timestamp for the missing END point, one microsecond earlier
              \common_Logger::t('Missing END TimePoint in QtiTimer, auto add an arbitrary value');
              $point = new TimePoint($tags, $timestamp - (1 / TimePoint::PRECISION), TimePoint::TYPE_END, TimePoint::TARGET_SERVER);
              $this->timeLine->add($point);
              $range[] = $point;
          }
          $this->checkTimestampCoherence($range, $timestamp);
  
          // append the new START TimePoint
          $point = new TimePoint($tags, $timestamp, TimePoint::TYPE_START, TimePoint::TARGET_SERVER);
          $this->timeLine->add($point);
  
          return $this;
      }
docs: Adds a "server start" TimePoint at a particular timestamp for the provided ItemRef
  @param string|array $tags
  @param float $timestamp
  @return Timer
  @throws TimeException