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