)]}'
{
  "commit": "f45ca3787fa8ed326f2ecc28296cd7b86f238fe9",
  "tree": "41f7adfd5c201060997ffaf1078d6fcfac60c330",
  "parents": [
    "536c39539184ca0edb49393231193204da3868b4"
  ],
  "author": {
    "name": "Henrik Boström",
    "email": "hbos@webrtc.org",
    "time": "Tue Mar 24 12:30:50 2020"
  },
  "committer": {
    "name": "Commit Bot",
    "email": "commit-bot@chromium.org",
    "time": "Tue Mar 24 13:31:54 2020"
  },
  "message": "[Stats] Explicit RTP-RTX and RTP-FEC mappings. Unblocks simulcast stats.\n\n--- Background ---\nThe webrtc::VideoSendStream::StreamStats are converted into\nVideoSenderInfo objects which turn into \"outbound-rtp\" stats objects in\ngetStats() (or \"ssrc\" objects in legacy getStats()).\n\nStreamStats are created for each type of substream: RTP media streams,\nRTX streams and FlexFEC streams - each with individual packet counters.\n\nThe RTX stream is responsible for retransmissions of a referenced media\nstream and the FlexFEC stream is responsible for FEC of a referenced\nmedia stream. RTX/FEC streams do not show up as separate objects in\ngetStats(). Only the media streams become \"outbound-rtp\" objects, but\ntheir packet and byte counters have to include the RTX and FEC counters.\n\n--- Overview of this CL ---\nThis CL adds MergeInfoAboutOutboundRtpSubstreams(). It takes\nStreamStats of all kinds as input, and outputs media-only StreamStats\n- incorporating the RTX and FEC counters into the relevant media\nStreamStats.\n\nThe merged StreamStats objects is a smaller set of objects than the\nnon-merged counterparts, but when aggregating all packet counters\ntogether we end up with exact same packet and count as before.\n\nBecause WebRtcVideoSendStream::GetVideoSenderInfo() currently aggregates\nthe StreamStats into a single VideoSenderInfo (single \"outbound-rtp\"),\nthis CL should not have any observable side-effects. Prior to this CL:\naggregate StreamStats. After this CL: merge StreamStats and then\naggregate them.\n\nHowever, when simulcast stats are implemented (WIP CL:\nhttps://webrtc-review.googlesource.com/c/src/+/168120) each RTP media\nstream should turn into an individual \"outbound-rtp\" object. We will\nthen no longer aggregate all StreamStats into a single \"info\". This CL\nunblocks simulcast stats by providing StreamStats objects that could be\nturned into individual VideoSenderInfos.\n\n--- The Changes ---\n1. Methods added to RtpConfig to be able to easily tell the relationship\n   between RTP, RTX and FEC ssrcs.\n2. StreamStats gets a StreamType (kMedia, kRtx or kFlexfec) that\n   replaces the booleans (is_rtx, is_flexfec).\n3. \"referenced_media_ssrc\" is added to StreamStats, making it possible\n   to tell which kRtx/kFlexFec stream stats need to be merged with which\n   kMedia StreamStats.\n4. MergeInfoAboutOutboundRtpSubstreams() added and used.\n\nBug: webrtc:11439\nChange-Id: Iaf9002041169a054ddfd32c7ea06bd1dc36c6bca\nReviewed-on: https://webrtc-review.googlesource.com/c/src/+/170826\nCommit-Queue: Henrik Boström \u003chbos@webrtc.org\u003e\nReviewed-by: Ilya Nikolaevskiy \u003cilnik@webrtc.org\u003e\nReviewed-by: Harald Alvestrand \u003chta@webrtc.org\u003e\nReviewed-by: Stefan Holmer \u003cstefan@webrtc.org\u003e\nCr-Commit-Position: refs/heads/master@{#30869}\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a2e8c0589108e4c0bd3a3d6bdb4f33b8187e220a",
      "old_mode": 33188,
      "old_path": "call/BUILD.gn",
      "new_id": "a33df1542b395b046781c2845aaa03c933dde09f",
      "new_mode": 33188,
      "new_path": "call/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "a23351bb5a02cc4271543669a2d027198d1b68ad",
      "old_mode": 33188,
      "old_path": "call/rtp_config.cc",
      "new_id": "d1db867dc822071bc1d8d2ac18040d1076ae6ffe",
      "new_mode": 33188,
      "new_path": "call/rtp_config.cc"
    },
    {
      "type": "modify",
      "old_id": "a0596a88397f3335460d2b9f1db1945e107d469e",
      "old_mode": 33188,
      "old_path": "call/rtp_config.h",
      "new_id": "d9caeb0e6bcecffe199c63b3e533281c29a125d6",
      "new_mode": 33188,
      "new_path": "call/rtp_config.h"
    },
    {
      "type": "modify",
      "old_id": "cf9af9fefdd4ae3956056b198c9bb41b8b54acc6",
      "old_mode": 33188,
      "old_path": "call/rtp_video_sender.cc",
      "new_id": "cb32085d35747c688537cf6e9695ce7bf327a09d",
      "new_mode": 33188,
      "new_path": "call/rtp_video_sender.cc"
    },
    {
      "type": "modify",
      "old_id": "f495d085cf709a0367e78f196603f2b29e2f049a",
      "old_mode": 33188,
      "old_path": "call/video_send_stream.cc",
      "new_id": "a4b6744918e51d5ce43260b41ff3c78ca893b55c",
      "new_mode": 33188,
      "new_path": "call/video_send_stream.cc"
    },
    {
      "type": "modify",
      "old_id": "962578d60b27ca6b9cd67fbd219e2ee1ddc69ee5",
      "old_mode": 33188,
      "old_path": "call/video_send_stream.h",
      "new_id": "08806ec2ec14f9d746e01172526e1195b8b24732",
      "new_mode": 33188,
      "new_path": "call/video_send_stream.h"
    },
    {
      "type": "modify",
      "old_id": "434a758ceea9bf8e4bcbb971cbeee12f0b76468b",
      "old_mode": 33188,
      "old_path": "media/engine/webrtc_video_engine.cc",
      "new_id": "9a8ee88bb2390f36a65d7043ef719a874435142b",
      "new_mode": 33188,
      "new_path": "media/engine/webrtc_video_engine.cc"
    },
    {
      "type": "modify",
      "old_id": "9f5e6d3379116cd8c3939f5fffc7b475c0ccab3c",
      "old_mode": 33188,
      "old_path": "media/engine/webrtc_video_engine.h",
      "new_id": "4eade6f67099946e5d39d5b8f90fdb1eadc057f4",
      "new_mode": 33188,
      "new_path": "media/engine/webrtc_video_engine.h"
    },
    {
      "type": "modify",
      "old_id": "563e3f337ec7ed158a78182b7634dfb50d0bff24",
      "old_mode": 33188,
      "old_path": "media/engine/webrtc_video_engine_unittest.cc",
      "new_id": "bc2f5f28bb10363f8f8c584a81d082a0ac03454d",
      "new_mode": 33188,
      "new_path": "media/engine/webrtc_video_engine_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "0d19a4e31218bec16e0199d0dc879ceabe9a9e1c",
      "old_mode": 33188,
      "old_path": "modules/rtp_rtcp/include/rtp_rtcp_defines.h",
      "new_id": "a95ac996a259e80930a5e569edda4703ad4c8d4d",
      "new_mode": 33188,
      "new_path": "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
    },
    {
      "type": "modify",
      "old_id": "60d84f14c789e9c5d399adee48bdd317dac08600",
      "old_mode": 33188,
      "old_path": "video/send_statistics_proxy.cc",
      "new_id": "1464605c4504c6cf7b068fa07cc46da85c7f148a",
      "new_mode": 33188,
      "new_path": "video/send_statistics_proxy.cc"
    },
    {
      "type": "modify",
      "old_id": "3f5ebd53b4ed147c6f4dda5e7e8da114af96fd5f",
      "old_mode": 33188,
      "old_path": "video/send_statistics_proxy_unittest.cc",
      "new_id": "8b49a268b6361d2eab01b033b7690c16d980597f",
      "new_mode": 33188,
      "new_path": "video/send_statistics_proxy_unittest.cc"
    }
  ]
}
