| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  *  Copyright 2016 The WebRTC Project Authors. All rights reserved. | 2  *  Copyright 2016 The WebRTC Project Authors. All rights reserved. | 
| 3  * | 3  * | 
| 4  *  Use of this source code is governed by a BSD-style license | 4  *  Use of this source code is governed by a BSD-style license | 
| 5  *  that can be found in the LICENSE file in the root of the source | 5  *  that can be found in the LICENSE file in the root of the source | 
| 6  *  tree. An additional intellectual property rights grant can be found | 6  *  tree. An additional intellectual property rights grant can be found | 
| 7  *  in the file PATENTS.  All contributing project authors may | 7  *  in the file PATENTS.  All contributing project authors may | 
| 8  *  be found in the AUTHORS file in the root of the source tree. | 8  *  be found in the AUTHORS file in the root of the source tree. | 
| 9  */ | 9  */ | 
| 10 | 10 | 
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 84   // shall be reserved in the vector (so that subclasses can allocate a vector | 84   // shall be reserved in the vector (so that subclasses can allocate a vector | 
| 85   // with room for both parent and child members without it having to resize). | 85   // with room for both parent and child members without it having to resize). | 
| 86   virtual std::vector<const RTCStatsMemberInterface*> | 86   virtual std::vector<const RTCStatsMemberInterface*> | 
| 87   MembersOfThisObjectAndAncestors( | 87   MembersOfThisObjectAndAncestors( | 
| 88       size_t additional_capacity) const; | 88       size_t additional_capacity) const; | 
| 89 | 89 | 
| 90   std::string const id_; | 90   std::string const id_; | 
| 91   int64_t timestamp_us_; | 91   int64_t timestamp_us_; | 
| 92 }; | 92 }; | 
| 93 | 93 | 
| 94 // All |RTCStats| classes should use this macro in a public section of the class | 94 // All |RTCStats| classes should use these macros. | 
| 95 // definition. | 95 // |WEBRTC_RTCSTATS_DECL| is placed in a public section of the class definition. | 
|  | 96 // |WEBRTC_RTCSTATS_IMPL| is placed outside the class definition (in a .cc). | 
| 96 // | 97 // | 
| 97 // This macro declares the static |kType| and overrides methods as required by | 98 // These macros declare (in _DECL) and define (in _IMPL) the static |kType| and | 
| 98 // subclasses of |RTCStats|: |copy|, |type|, and | 99 // overrides methods as required by subclasses of |RTCStats|: |copy|, |type| and | 
| 99 // |MembersOfThisObjectAndAncestors|. The |...| argument is a list of addresses | 100 // |MembersOfThisObjectAndAncestors|. The |...| argument is a list of addresses | 
| 100 // to each member defined in the implementing class (list cannot be empty, must | 101 // to each member defined in the implementing class. The list must have at least | 
| 101 // have at least one new member). | 102 // one member. | 
| 102 // | 103 // | 
| 103 // (Since class names need to be known to implement these methods this cannot be | 104 // (Since class names need to be known to implement these methods this cannot be | 
| 104 // part of the base |RTCStats|. While these methods could be implemented using | 105 // part of the base |RTCStats|. While these methods could be implemented using | 
| 105 // templates, that would only work for immediate subclasses. Subclasses of | 106 // templates, that would only work for immediate subclasses. Subclasses of | 
| 106 // subclasses also have to override these methods, resulting in boilerplate | 107 // subclasses also have to override these methods, resulting in boilerplate | 
| 107 // code. Using a macro avoids this and works for any |RTCStats| class, including | 108 // code. Using a macro avoids this and works for any |RTCStats| class, including | 
| 108 // grandchildren.) | 109 // grandchildren.) | 
| 109 // | 110 // | 
| 110 // Sample usage: | 111 // Sample usage: | 
| 111 // | 112 // | 
| 112 // rtcfoostats.h: | 113 // rtcfoostats.h: | 
| 113 //   class RTCFooStats : public RTCStats { | 114 //   class RTCFooStats : public RTCStats { | 
| 114 //    public: | 115 //    public: | 
| 115 //     RTCFooStats(const std::string& id, int64_t timestamp_us) | 116 //     WEBRTC_RTCSTATS_DECL(); | 
| 116 //         : RTCStats(id, timestamp_us), |  | 
| 117 //           foo("foo"), |  | 
| 118 //           bar("bar") { |  | 
| 119 //     } |  | 
| 120 // | 117 // | 
| 121 //     WEBRTC_RTCSTATS_IMPL(RTCStats, RTCFooStats, | 118 //     RTCFooStats(const std::string& id, int64_t timestamp_us); | 
| 122 //         &foo, |  | 
| 123 //         &bar); |  | 
| 124 // | 119 // | 
| 125 //     RTCStatsMember<int32_t> foo; | 120 //     RTCStatsMember<int32_t> foo; | 
| 126 //     RTCStatsMember<int32_t> bar; | 121 //     RTCStatsMember<int32_t> bar; | 
| 127 //   }; | 122 //   }; | 
| 128 // | 123 // | 
| 129 // rtcfoostats.cc: | 124 // rtcfoostats.cc: | 
| 130 //   const char RTCFooStats::kType[] = "foo-stats"; | 125 //   WEBRTC_RTCSTATS_IMPL(RTCFooStats, RTCStats, "foo-stats" | 
|  | 126 //       &foo, | 
|  | 127 //       &bar); | 
| 131 // | 128 // | 
| 132 #define WEBRTC_RTCSTATS_IMPL(parent_class, this_class, ...)                    \ | 129 //   RTCFooStats::RTCFooStats(const std::string& id, int64_t timestamp_us) | 
|  | 130 //       : RTCStats(id, timestamp_us), | 
|  | 131 //         foo("foo"), | 
|  | 132 //         bar("bar") { | 
|  | 133 //   } | 
|  | 134 // | 
|  | 135 #define WEBRTC_RTCSTATS_DECL()                                                 \ | 
| 133  public:                                                                       \ | 136  public:                                                                       \ | 
| 134   static const char kType[];                                                   \ | 137   static const char kType[];                                                   \ | 
| 135   std::unique_ptr<webrtc::RTCStats> copy() const override {                    \ | 138                                                                                \ | 
| 136     return std::unique_ptr<webrtc::RTCStats>(new this_class(*this));           \ | 139   std::unique_ptr<webrtc::RTCStats> copy() const override;                     \ | 
| 137   }                                                                            \ | 140   const char* type() const override;                                           \ | 
| 138   const char* type() const override { return this_class::kType; }              \ | 141                                                                                \ | 
| 139  protected:                                                                    \ | 142  protected:                                                                    \ | 
| 140   std::vector<const webrtc::RTCStatsMemberInterface*>                          \ | 143   std::vector<const webrtc::RTCStatsMemberInterface*>                          \ | 
| 141   MembersOfThisObjectAndAncestors(                                             \ | 144   MembersOfThisObjectAndAncestors(                                             \ | 
| 142       size_t local_var_additional_capacity) const override {                   \ | 145       size_t local_var_additional_capacity) const override;                    \ | 
|  | 146                                                                                \ | 
|  | 147  public: | 
|  | 148 | 
|  | 149 #define WEBRTC_RTCSTATS_IMPL(this_class, parent_class, type_str, ...)          \ | 
|  | 150   const char this_class::kType[] = type_str;                                   \ | 
|  | 151                                                                                \ | 
|  | 152   std::unique_ptr<webrtc::RTCStats> this_class::copy() const {                 \ | 
|  | 153     return std::unique_ptr<webrtc::RTCStats>(new this_class(*this));           \ | 
|  | 154   }                                                                            \ | 
|  | 155                                                                                \ | 
|  | 156   const char* this_class::type() const {                                       \ | 
|  | 157     return this_class::kType;                                                  \ | 
|  | 158   }                                                                            \ | 
|  | 159                                                                                \ | 
|  | 160   std::vector<const webrtc::RTCStatsMemberInterface*>                          \ | 
|  | 161   this_class::MembersOfThisObjectAndAncestors(                                 \ | 
|  | 162       size_t local_var_additional_capacity) const {                            \ | 
| 143     const webrtc::RTCStatsMemberInterface* local_var_members[] = {             \ | 163     const webrtc::RTCStatsMemberInterface* local_var_members[] = {             \ | 
| 144       __VA_ARGS__                                                              \ | 164       __VA_ARGS__                                                              \ | 
| 145     };                                                                         \ | 165     };                                                                         \ | 
| 146     size_t local_var_members_count =                                           \ | 166     size_t local_var_members_count =                                           \ | 
| 147         sizeof(local_var_members) / sizeof(local_var_members[0]);              \ | 167         sizeof(local_var_members) / sizeof(local_var_members[0]);              \ | 
| 148     std::vector<const webrtc::RTCStatsMemberInterface*> local_var_members_vec =\ | 168     std::vector<const webrtc::RTCStatsMemberInterface*> local_var_members_vec =\ | 
| 149         parent_class::MembersOfThisObjectAndAncestors(                         \ | 169         parent_class::MembersOfThisObjectAndAncestors(                         \ | 
| 150             local_var_members_count + local_var_additional_capacity);          \ | 170             local_var_members_count + local_var_additional_capacity);          \ | 
| 151     RTC_DCHECK_GE(                                                             \ | 171     RTC_DCHECK_GE(                                                             \ | 
| 152         local_var_members_vec.capacity() - local_var_members_vec.size(),       \ | 172         local_var_members_vec.capacity() - local_var_members_vec.size(),       \ | 
| 153         local_var_members_count + local_var_additional_capacity);              \ | 173         local_var_members_count + local_var_additional_capacity);              \ | 
| 154     local_var_members_vec.insert(local_var_members_vec.end(),                  \ | 174     local_var_members_vec.insert(local_var_members_vec.end(),                  \ | 
| 155                                  &local_var_members[0],                        \ | 175                                  &local_var_members[0],                        \ | 
| 156                                  &local_var_members[local_var_members_count]); \ | 176                                  &local_var_members[local_var_members_count]); \ | 
| 157     return local_var_members_vec;                                              \ | 177     return local_var_members_vec;                                              \ | 
| 158   }                                                                            \ | 178   } | 
| 159  public: |  | 
| 160 | 179 | 
| 161 // Interface for |RTCStats| members, which have a name and a value of a type | 180 // Interface for |RTCStats| members, which have a name and a value of a type | 
| 162 // defined in a subclass. Only the types listed in |Type| are supported, these | 181 // defined in a subclass. Only the types listed in |Type| are supported, these | 
| 163 // are implemented by |RTCStatsMember<T>|. The value of a member may be | 182 // are implemented by |RTCStatsMember<T>|. The value of a member may be | 
| 164 // undefined, the value can only be read if |is_defined|. | 183 // undefined, the value can only be read if |is_defined|. | 
| 165 class RTCStatsMemberInterface { | 184 class RTCStatsMemberInterface { | 
| 166  public: | 185  public: | 
| 167   // Member value types. | 186   // Member value types. | 
| 168   enum Type { | 187   enum Type { | 
| 169     kBool,                  // bool | 188     kBool,                  // bool | 
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 274     return &value_; | 293     return &value_; | 
| 275   } | 294   } | 
| 276 | 295 | 
| 277  private: | 296  private: | 
| 278   T value_; | 297   T value_; | 
| 279 }; | 298 }; | 
| 280 | 299 | 
| 281 }  // namespace webrtc | 300 }  // namespace webrtc | 
| 282 | 301 | 
| 283 #endif  // WEBRTC_API_STATS_RTCSTATS_H_ | 302 #endif  // WEBRTC_API_STATS_RTCSTATS_H_ | 
| OLD | NEW | 
|---|