Page Speed Optimization Libraries  1.6.29.3
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 StatisticsLogger;
00039 class ThreadSystem;
00040 class Writer;
00041 
00044 class SplitVariable : public Variable {
00045  public:
00049   SplitVariable(Variable* rw, Variable* w);
00050   virtual ~SplitVariable();
00051   virtual void Set(int64 new_value);
00052   virtual int64 SetReturningPreviousValue(int64 new_value);
00053   virtual int64 Get() const;
00054   virtual StringPiece GetName() const;
00055   virtual int64 Add(int delta);
00056 
00057  private:
00058   Variable* rw_;
00059   Variable* w_;
00060   DISALLOW_COPY_AND_ASSIGN(SplitVariable);
00061 };
00062 
00065 class SplitHistogram : public Histogram {
00066  public:
00070   SplitHistogram(ThreadSystem* thread_system, Histogram* rw, Histogram* w);
00071   virtual ~SplitHistogram();
00072 
00075   virtual void Add(double value);
00076   virtual void Clear();
00077   virtual void Render(int index, Writer* writer, MessageHandler* handler);
00078   virtual int NumBuckets();
00079   virtual void EnableNegativeBuckets();
00080   virtual void SetMinValue(double value);
00081   virtual void SetMaxValue(double value);
00082   virtual void SetSuggestedNumBuckets(int i);
00083   virtual double BucketStart(int index);
00084   virtual double BucketLimit(int index);
00085   virtual double BucketCount(int index);
00086 
00087  protected:
00088   virtual double AverageInternal();
00089   virtual double PercentileInternal(const double perc);
00090   virtual double StandardDeviationInternal();
00091   virtual double CountInternal();
00092   virtual double MaximumInternal();
00093   virtual double MinimumInternal();
00094 
00095   virtual AbstractMutex* lock();
00096 
00097  private:
00098   scoped_ptr<AbstractMutex> lock_;
00099   Histogram* rw_;
00100   Histogram* w_;
00101 
00102   DISALLOW_COPY_AND_ASSIGN(SplitHistogram);
00103 };
00104 
00107 class SplitTimedVariable : public TimedVariable {
00108  public:
00112   SplitTimedVariable(TimedVariable* rw, TimedVariable* w);
00113   virtual ~SplitTimedVariable();
00114 
00115   virtual void IncBy(int64 delta);
00116   virtual int64 Get(int level);
00117   virtual void Clear();
00118 
00119  private:
00120   TimedVariable* rw_;
00121   TimedVariable* w_;
00122 
00123   DISALLOW_COPY_AND_ASSIGN(SplitTimedVariable);
00124 };
00125 
00126 class SplitStatistics
00127     : public StatisticsTemplate<SplitVariable, SplitHistogram,
00128                                 SplitTimedVariable> {
00129  public:
00138   SplitStatistics(ThreadSystem* thread_system,
00139                   Statistics* local,
00140                   Statistics* global);
00141 
00142   virtual ~SplitStatistics();
00143 
00144   virtual StatisticsLogger* console_logger() {
00147     return local_->console_logger();
00148   }
00149 
00150  protected:
00151   virtual SplitVariable* NewVariable(const StringPiece& name, int index);
00152   virtual SplitVariable* NewGlobalVariable(const StringPiece& name, int index);
00153   virtual SplitHistogram* NewHistogram(const StringPiece& name);
00154   virtual SplitTimedVariable* NewTimedVariable(const StringPiece& name,
00155                                                int index);
00156 
00157  private:
00158   ThreadSystem* thread_system_;
00159   scoped_ptr<Statistics> local_;
00160   Statistics* global_;
00161   DISALLOW_COPY_AND_ASSIGN(SplitStatistics);
00162 };
00163 
00164 }  
00165 
00166 #endif  ///< NET_INSTAWEB_UTIL_PUBLIC_SPLIT_STATISTICS_H_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines