Page Speed Optimization Libraries  1.2.24.1
net/instaweb/util/public/split_statistics.h
Go to the documentation of this file.
00001 /*
00002  * Copyright 2012 Google Inc.
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *      http:///www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00024 
00025 #ifndef NET_INSTAWEB_UTIL_PUBLIC_SPLIT_STATISTICS_H_
00026 #define NET_INSTAWEB_UTIL_PUBLIC_SPLIT_STATISTICS_H_
00027 
00028 #include "net/instaweb/util/public/basictypes.h"
00029 #include "net/instaweb/util/public/scoped_ptr.h"
00030 #include "net/instaweb/util/public/statistics.h"
00031 #include "net/instaweb/util/public/statistics_template.h"
00032 #include "net/instaweb/util/public/string_util.h"        
00033 
00034 namespace net_instaweb {
00035 
00036 class AbstractMutex;
00037 class MessageHandler;
00038 class ThreadSystem;
00039 class Writer;
00040 
00043 class SplitVariable : public Variable {
00044  public:
00048   SplitVariable(Variable* rw, Variable* w);
00049   virtual ~SplitVariable();
00050   virtual void Set(int64 new_value);
00051   virtual int64 SetReturningPreviousValue(int64 new_value);
00052   virtual int64 Get() const;
00053   virtual StringPiece GetName() const;
00054   virtual int64 Add(int delta);
00055 
00056  private:
00057   Variable* rw_;
00058   Variable* w_;
00059   DISALLOW_COPY_AND_ASSIGN(SplitVariable);
00060 };
00061 
00062 class SplitConsoleStatisticsLogger : public ConsoleStatisticsLogger {
00063  public:
00065   SplitConsoleStatisticsLogger(ConsoleStatisticsLogger* a,
00066                                ConsoleStatisticsLogger* b);
00067   virtual ~SplitConsoleStatisticsLogger();
00068   virtual void UpdateAndDumpIfRequired();
00069 
00070  private:
00071   ConsoleStatisticsLogger* a_;
00072   ConsoleStatisticsLogger* b_;
00073   DISALLOW_COPY_AND_ASSIGN(SplitConsoleStatisticsLogger);
00074 };
00075 
00078 class SplitHistogram : public Histogram {
00079  public:
00083   SplitHistogram(ThreadSystem* thread_system, Histogram* rw, Histogram* w);
00084   virtual ~SplitHistogram();
00085 
00088   virtual void Add(double value);
00089   virtual void Clear();
00090   virtual void Render(int index, Writer* writer, MessageHandler* handler);
00091   virtual int NumBuckets();
00092   virtual void EnableNegativeBuckets();
00093   virtual void SetMinValue(double value);
00094   virtual void SetMaxValue(double value);
00095   virtual void SetSuggestedNumBuckets(int i);
00096   virtual double BucketStart(int index);
00097   virtual double BucketLimit(int index);
00098   virtual double BucketCount(int index);
00099 
00100  protected:
00101   virtual double AverageInternal();
00102   virtual double PercentileInternal(const double perc);
00103   virtual double StandardDeviationInternal();
00104   virtual double CountInternal();
00105   virtual double MaximumInternal();
00106   virtual double MinimumInternal();
00107 
00108   virtual AbstractMutex* lock();
00109 
00110  private:
00111   scoped_ptr<AbstractMutex> lock_;
00112   Histogram* rw_;
00113   Histogram* w_;
00114 
00115   DISALLOW_COPY_AND_ASSIGN(SplitHistogram);
00116 };
00117 
00120 class SplitTimedVariable : public TimedVariable {
00121  public:
00125   SplitTimedVariable(TimedVariable* rw, TimedVariable* w);
00126   virtual ~SplitTimedVariable();
00127 
00128   virtual void IncBy(int64 delta);
00129   virtual int64 Get(int level);
00130   virtual void Clear();
00131 
00132  private:
00133   TimedVariable* rw_;
00134   TimedVariable* w_;
00135 
00136   DISALLOW_COPY_AND_ASSIGN(SplitTimedVariable);
00137 };
00138 
00139 class SplitStatistics
00140     : public StatisticsTemplate<SplitVariable, SplitHistogram,
00141                                 SplitTimedVariable> {
00142  public:
00151   SplitStatistics(ThreadSystem* thread_system,
00152                   Statistics* local,
00153                   Statistics* global);
00154 
00155   virtual ~SplitStatistics();
00156 
00157  protected:
00158   virtual SplitVariable* NewVariable(const StringPiece& name, int index);
00159   virtual SplitVariable* NewGlobalVariable(const StringPiece& name, int index);
00160   virtual SplitHistogram* NewHistogram(const StringPiece& name);
00161   virtual SplitTimedVariable* NewTimedVariable(const StringPiece& name,
00162                                                int index);
00164 
00165  private:
00166   ThreadSystem* thread_system_;
00167   scoped_ptr<Statistics> local_;
00168   Statistics* global_;
00169   DISALLOW_COPY_AND_ASSIGN(SplitStatistics);
00170 };
00171 
00172 }  
00173 
00174 #endif  ///< NET_INSTAWEB_UTIL_PUBLIC_SPLIT_STATISTICS_H_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines