protected synchronized void initializePerformanceMonitoring(
      @Nullable ImagePerfDataListener imagePerfDataListener,
      AbstractDraweeControllerBuilder<
              PipelineDraweeControllerBuilder,
              ImageRequest,
              CloseableReference<CloseableImage>,
              ImageInfo>
          builder) {
    if (mImagePerfMonitor != null) {
      mImagePerfMonitor.reset();
    }
    if (imagePerfDataListener != null) {
      if (mImagePerfMonitor == null) {
        mImagePerfMonitor = new ImagePerfMonitor(AwakeTimeSinceBootClock.get(), this);
      }
      mImagePerfMonitor.addImagePerfDataListener(imagePerfDataListener);
      mImagePerfMonitor.setEnabled(true);
    }

    mImageRequest = builder.getImageRequest();
    mFirstAvailableImageRequests = builder.getFirstAvailableImageRequests();
    mLowResImageRequest = builder.getLowResImageRequest();
  }
Initializes this controller with the new data source supplier, id and caller context. This
allows for reusing of the existing controller instead of instantiating a new one. This method
should be called when the controller is in detached state.

@param dataSourceSupplier data source supplier
@param id unique id for this controller
@param callerContext tag and context for this controller
drawee-backends/drawee-pipeline/src/main/java/com/facebook/drawee/backends/pipeline/PipelineDraweeController.java