Class SpeedManagerAlgorithmProviderDHTPing

java.lang.Object
com.biglybt.core.speedmanager.impl.v2.SpeedManagerAlgorithmProviderDHTPing
All Implemented Interfaces:
COConfigurationListener, SpeedManagerAlgorithmProvider

public class SpeedManagerAlgorithmProviderDHTPing extends Object implements SpeedManagerAlgorithmProvider, COConfigurationListener
This class implements an Vivaldi strategy for adjusting the upload limit. It will every 30 seconds calculate the distance to the center of the Vivaldi structure and if it determines that it is going away from it will lower the limit. If it getting closer it will increase the upload limit.
  • Field Details

    • adapter

      private final SpeedManagerAlgorithmProviderAdapter adapter
    • dhtPlugin

      private PluginInterface dhtPlugin
    • timeSinceLastUpdate

      private long timeSinceLastUpdate
    • metricGoodResult

      private static int metricGoodResult
    • metricGoodTolerance

      private static int metricGoodTolerance
    • metricBadResult

      private static int metricBadResult
    • metricBadTolerance

      private static int metricBadTolerance
    • consecutiveUpticks

      private int consecutiveUpticks
    • consecutiveDownticks

      private int consecutiveDownticks
    • limitMonitor

      private final SpeedLimitMonitor limitMonitor
    • lastMetricValue

      private int lastMetricValue
    • numIntervalsBetweenCal

      private static int numIntervalsBetweenCal
    • skipIntervalAfterAdjustment

      private static boolean skipIntervalAfterAdjustment
    • pingTimeList

      private List pingTimeList
    • hadAdjustmentLastInterval

      private boolean hadAdjustmentLastInterval
    • intervalCount

      private int intervalCount
    • pingSourceManager

      final PingSourceManager pingSourceManager
    • sessionMaxUploadRate

      int sessionMaxUploadRate
  • Constructor Details

  • Method Details

    • destroy

      public void destroy()
      Specified by:
      destroy in interface SpeedManagerAlgorithmProvider
    • configurationSaved

      public void configurationSaved()
      Specified by:
      configurationSaved in interface COConfigurationListener
    • reset

      public void reset()
      Reset any state to start of day values
      Specified by:
      reset in interface SpeedManagerAlgorithmProvider
    • updateStats

      public void updateStats()
      Called periodically (see period above) to allow stats to be updated.
      Specified by:
      updateStats in interface SpeedManagerAlgorithmProvider
    • logCurrentData

      private void logCurrentData(int downRate, int currDownLimit, int upRate, int currUploadLimit)
      log "curr-data" line to the AutoSpeed-Beta file.
      Parameters:
      downRate - -
      currDownLimit - -
      upRate - -
      currUploadLimit - -
    • pingSourceFound

      public void pingSourceFound(SpeedManagerPingSource source, boolean is_replacement)
      Called when a new source of ping times has been found
      Specified by:
      pingSourceFound in interface SpeedManagerAlgorithmProvider
      Parameters:
      source - -
      is_replacement - One of the initial sources or a replacement for a failed one
    • pingSourceFailed

      public void pingSourceFailed(SpeedManagerPingSource source)
      Ping source has failed
      Specified by:
      pingSourceFailed in interface SpeedManagerAlgorithmProvider
      Parameters:
      source - -
    • calculate

      public void calculate(SpeedManagerPingSource[] sources)
      Called whenever a new set of ping values is available for processing
      Specified by:
      calculate in interface SpeedManagerAlgorithmProvider
      Parameters:
      sources - -
    • endLimitTesting

      private void endLimitTesting()
    • logLimitStatus

      private void logLimitStatus()
      Log the limit status. Max, Min and Conf. log("limits:down-max:down-min:down-conf:up-max:up-min:up-conf");
    • calculateMediaDHTPingTime

      private boolean calculateMediaDHTPingTime()
      DHT Ping data is one of the metrics used. Calculate it here.
      Returns:
      - true if should exit early from the calculate method.
    • logNewLimits

      private void logNewLimits(SMUpdate update)
    • setNewLimits

      private void setNewLimits(SMUpdate update)
      Just update the limits.
      Parameters:
      update - - SMUpdate
    • determineSignalStrength

      private float determineSignalStrength(int currMetricValue)
      Determined by the vivaldi value and the number of consecutive calculations with the same result.
      Parameters:
      currMetricValue - -
      Returns:
      -
    • consectiveMultiplier

      private float consectiveMultiplier()
      The longer were get the same signal the stronger it is. On upticks however we only increase the rates when if the upload or download is saturated.
      Returns:
      -
    • calculateUpTickMultiple

      private float calculateUpTickMultiple(int c)
      Want to rise much slower then drop.
      Parameters:
      c - - number of upsignals received in a row
      Returns:
      - multiple factor.
    • calculateDownTickMultiple

      private float calculateDownTickMultiple(int c)
      Want to drop rate faster then increase.
      Parameters:
      c - -
      Returns:
      -
    • getIdlePingMillis

      public int getIdlePingMillis()
      Various getters for interesting info shown in stats view
      Specified by:
      getIdlePingMillis in interface SpeedManagerAlgorithmProvider
      Returns:
      -
    • getCurrentPingMillis

      public int getCurrentPingMillis()
      Specified by:
      getCurrentPingMillis in interface SpeedManagerAlgorithmProvider
    • getMaxPingMillis

      public int getMaxPingMillis()
      Specified by:
      getMaxPingMillis in interface SpeedManagerAlgorithmProvider
    • getCurrentChokeSpeed

      public int getCurrentChokeSpeed()
      Returns the current view of when choking occurs
      Specified by:
      getCurrentChokeSpeed in interface SpeedManagerAlgorithmProvider
      Returns:
      speed in bytes/sec
    • getMaxUploadSpeed

      public int getMaxUploadSpeed()
      Specified by:
      getMaxUploadSpeed in interface SpeedManagerAlgorithmProvider
    • getAdjustsDownloadLimits

      public boolean getAdjustsDownloadLimits()
      Description copied from interface: SpeedManagerAlgorithmProvider
      Indicates whether or not the provider is adjusting download as well as upload limits
      Specified by:
      getAdjustsDownloadLimits in interface SpeedManagerAlgorithmProvider
      Returns:
    • log

      protected void log(String str)