00001
00002
00003 #ifndef OSCL_SOCKET_STATS_H_INCLUDED
00004 #define OSCL_SOCKET_STATS_H_INCLUDED
00005
00009 #include "oscl_base.h"
00010 #include "oscl_vector.h"
00011 #include "oscl_mem.h"
00012 #include "oscl_mutex.h"
00013
00014 enum TOsclSocketStatEvent
00015 {
00016
00017 EOsclSocket_RequestAO_Success
00018 , EOsclSocket_RequestAO_Canceled
00019 , EOsclSocket_RequestAO_Error
00020 , EOsclSocket_RequestAO_Timeout
00021
00022 , EOsclSocket_ServRequestIssued
00023 , EOsclSocket_ServPoll
00024 , EOsclSocket_OS
00025 , EOsclSocket_Readable
00026 , EOsclSocket_Writable
00027 , EOsclSocket_Except
00028 , EOsclSocket_DataRecv
00029 , EOsclSocket_DataSent
00030 , EOsclSocket_ServRequestComplete
00031 , EOsclSocket_ServRequestCancelIssued
00032
00033 , EOsclSocketServ_LoopsockOk
00034 , EOsclSocketServ_LoopsockError
00035 };
00036 static const char* const TPVSocketStatStr[] =
00037 {
00038
00039 "AO_Success"
00040 , "AO_Canceled"
00041 , "AO_Error"
00042 , "AO_Timeout"
00043
00044 , "Serv_ReqIssued"
00045 , "Serv_Poll"
00046 , "Serv_OS_Op"
00047 , "Serv_Readable"
00048 , "Serv_Writeable"
00049 , "Serv_Except!"
00050 , "Serv_DataRecv'd"
00051 , "Serv_DataSent"
00052 , "Serv_ReqComplete"
00053 , "Serv_ReqCancel"
00054
00055 , "Loopsock_OK"
00056 , "Loopsock_Err"
00057 } ;
00058
00059 enum TOsclSocketServStatEvent
00060 {
00061
00062 EOsclSocketServ_SelectNoActivity = 0
00063 , EOsclSocketServ_SelectActivity
00064 , EOsclSocketServ_SelectRescheduleAsap
00065 , EOsclSocketServ_SelectReschedulePoll
00066 , EOsclSocketServ_LastEvent
00067 };
00068 static const char* const TPVSocketServStatStr[] =
00069 {
00070 "Select_No"
00071 , "Select_Yes"
00072 , "Select_Resched_Asap"
00073 , "Select_Resched_Poll"
00074 } ;
00075
00076 #include "oscl_socket_tuneables.h"
00077 #if(PV_OSCL_SOCKET_STATS_LOGGING)
00078
00079 class PVLogger;
00080 class OsclSocketStatEventEntry
00081 {
00082 public:
00083 OsclSocketStatEventEntry(TOsclSocketStatEvent aEvent, uint32 aTime, int32 aParam)
00084 : iEvent(aEvent)
00085 , iTicks(aTime)
00086 , iParam(aParam)
00087 {}
00088 TOsclSocketStatEvent iEvent;
00089 uint32 iTicks;
00090 int32 iParam;
00091 };
00092
00093 #include "oscl_socket_types.h"
00094
00095 #define OsclSocketStats_NUM_ACTIVE_REQUESTS EPVSocket_Last
00096
00097
00098
00099 #define OsclSocketStats_MAX_POLL_EVENTS 100
00100
00101 class OsclSocketStats
00102 {
00103 public:
00104 OsclSocketStats();
00105 ~OsclSocketStats();
00106 void ShowTuneables();
00107 void Add(TPVSocketFxn, TOsclSocketStatEvent, int32 aParam = (-1));
00108 void Log(TPVSocketFxn);
00109 void Log();
00110 void Clear(TPVSocketFxn);
00111 void Construct(OsclAny* aContainer, OsclAny*aServ);
00112 void LogAndDump();
00113 private:
00114 Oscl_Vector<OsclSocketStatEventEntry, OsclMemAllocator> iEvents[OsclSocketStats_NUM_ACTIVE_REQUESTS];
00115 Oscl_Vector<OsclSocketStatEventEntry, OsclMemAllocator> iPollEvents[OsclSocketStats_NUM_ACTIVE_REQUESTS];
00116 int32 iExcessPollEvents[OsclSocketStats_NUM_ACTIVE_REQUESTS];
00117 int32 iLastCompletionTime[OsclSocketStats_NUM_ACTIVE_REQUESTS];
00118 OsclThreadLock iLock;
00119 char* iLogStr;
00120 PVLogger* iLogger;
00121 OsclAny* iSock;
00122 OsclAny* iServ;
00123 };
00124
00125 class OsclSocketServStats
00126 {
00127 public:
00128 OsclSocketServStats();
00129 ~OsclSocketServStats();
00130 void Add(TOsclSocketServStatEvent);
00131 void Construct(OsclAny*aServ);
00132 void LogAndDump();
00133 private:
00134 void Log(TOsclSocketServStatEvent);
00135 void Clear();
00136 void ShowTuneables();
00137 uint32 iEvents[EOsclSocketServ_LastEvent];
00138 PVLogger* iLogger;
00139 OsclAny* iServ;
00140 };
00141
00142 #endif
00143 #endif
00144
00145
00146