• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 
19 
20 #ifndef OSCL_SOCKET_STATS_H_INCLUDED
21 #define OSCL_SOCKET_STATS_H_INCLUDED
22 
23 /*!
24 ** Socket diagnostics.
25 */
26 #include "oscl_base.h"
27 #include "oscl_vector.h"
28 #include "oscl_mem.h"
29 #include "oscl_mutex.h"
30 
31 enum TOsclSocketStatEvent
32 {
33     //Request/Method AO events
34     EOsclSocket_RequestAO_Success
35     , EOsclSocket_RequestAO_Canceled
36     , EOsclSocket_RequestAO_Error
37     , EOsclSocket_RequestAO_Timeout
38     //Server events
39     , EOsclSocket_ServRequestIssued
40     , EOsclSocket_ServPoll
41     , EOsclSocket_OS
42     , EOsclSocket_Readable
43     , EOsclSocket_Writable
44     , EOsclSocket_Except
45     , EOsclSocket_DataRecv
46     , EOsclSocket_DataSent
47     , EOsclSocket_ServRequestComplete
48     , EOsclSocket_ServRequestCancelIssued
49     //loop socket events
50     , EOsclSocketServ_LoopsockOk
51     , EOsclSocketServ_LoopsockError
52 };
53 static const char* const TPVSocketStatStr[] =
54 {
55     //Request/Method AO events
56     "AO_Success"
57     , "AO_Canceled"
58     , "AO_Error"
59     , "AO_Timeout"
60     //Server events
61     , "Serv_ReqIssued"
62     , "Serv_Poll"
63     , "Serv_OS_Op"
64     , "Serv_Readable"
65     , "Serv_Writeable"
66     , "Serv_Except!"
67     , "Serv_DataRecv'd"
68     , "Serv_DataSent"
69     , "Serv_ReqComplete"
70     , "Serv_ReqCancel"
71     //loop socket events
72     , "Loopsock_OK"
73     , "Loopsock_Err"
74 } ;
75 
76 enum TOsclSocketServStatEvent
77 {
78     //select loop events
79     EOsclSocketServ_SelectNoActivity = 0
80     , EOsclSocketServ_SelectActivity
81     , EOsclSocketServ_SelectRescheduleAsap
82     , EOsclSocketServ_SelectReschedulePoll
83     , EOsclSocketServ_LastEvent
84 };
85 static const char* const TPVSocketServStatStr[] =
86 {
87     "Select_No"
88     , "Select_Yes"
89     , "Select_Resched_Asap"
90     , "Select_Resched_Poll"
91 } ;
92 
93 #include "oscl_socket_tuneables.h"
94 #if(PV_OSCL_SOCKET_STATS_LOGGING)
95 
96 class PVLogger;
97 class OsclSocketStatEventEntry
98 {
99     public:
OsclSocketStatEventEntry(TOsclSocketStatEvent aEvent,uint32 aTime,int32 aParam)100         OsclSocketStatEventEntry(TOsclSocketStatEvent aEvent, uint32 aTime, int32 aParam)
101                 : iEvent(aEvent)
102                 , iTicks(aTime)
103                 , iParam(aParam)
104         {}
105         TOsclSocketStatEvent iEvent;
106         uint32 iTicks;
107         int32 iParam;
108 };
109 
110 #include "oscl_socket_types.h"
111 
112 #define OsclSocketStats_NUM_ACTIVE_REQUESTS EPVSocket_Last
113 
114 //Define the maximum number of polling events that will be logged.
115 //Additional poll events will be counted but not logged individually.
116 #define OsclSocketStats_MAX_POLL_EVENTS 100
117 
118 class OsclSocketStats
119 {
120     public:
121         OsclSocketStats();
122         ~OsclSocketStats();
123         void ShowTuneables();
124         void Add(TPVSocketFxn, TOsclSocketStatEvent, int32 aParam = (-1));
125         void Log(TPVSocketFxn);
126         void Log();
127         void Clear(TPVSocketFxn);
128         void Construct(OsclAny* aContainer, OsclAny*aServ);
129         void LogAndDump();
130     private:
131         Oscl_Vector<OsclSocketStatEventEntry, OsclMemAllocator> iEvents[OsclSocketStats_NUM_ACTIVE_REQUESTS];
132         Oscl_Vector<OsclSocketStatEventEntry, OsclMemAllocator> iPollEvents[OsclSocketStats_NUM_ACTIVE_REQUESTS];
133         int32 iExcessPollEvents[OsclSocketStats_NUM_ACTIVE_REQUESTS];
134         int32 iLastCompletionTime[OsclSocketStats_NUM_ACTIVE_REQUESTS];
135         OsclThreadLock iLock;
136         char* iLogStr;
137         PVLogger* iLogger;
138         OsclAny* iSock;
139         OsclAny* iServ;
140 };
141 
142 class OsclSocketServStats
143 {
144     public:
145         OsclSocketServStats();
146         ~OsclSocketServStats();
147         void Add(TOsclSocketServStatEvent);
148         void Construct(OsclAny*aServ);
149         void LogAndDump();
150     private:
151         void Log(TOsclSocketServStatEvent);
152         void Clear();
153         void ShowTuneables();
154         uint32 iEvents[EOsclSocketServ_LastEvent];
155         PVLogger* iLogger;
156         OsclAny* iServ;
157 };
158 
159 #endif
160 #endif
161 
162 
163 
164