base::CircularQueue give up on const correctness for MSVC

This CL makes the CircularQueue iterator not work on const
queue instances (for which there is no current usage) in exchange
of making it work on MSVC.
The problem is that the current Iterator implementation is only
half const-correct. A truly const-correct version would require
two Iterator classes a const_iterator and an interator, and
corresponding const+non-const begin()/end() and front()/back()
methods on the CircularQueue container. That's too much complexity
and more chances to get things wrong.

Failure log: https://pastebin.com/raw/2v3q6pkf
FAILED: obj/src/base/unittests.circular_queue_unittest.obj
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\bin\Hostx64\x64\cl.exe /nologo /showIncludes /FC -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -DNOMINMAX -D_HAS_EXCEPTIONS=0 -DWIN32_LEAN_AND_MEAN -DGTEST_LANG_CXX11=1 -DPERFETTO_IMPLEMENTATION "-IC:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/include" "-IC:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/ucrt" "-IC:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/um" "-IC:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/shared" -I../../buildtools/googletest/googletest/include -I../../buildtools/googletest/googlemock/include -I../.. -I../../include -Igen/build_config -Igen -I../../src/third_party_getopt /Od /bigobj /Gy /WX /Z7 /W2 /wd4244 /wd4267 /GR- /c ../../src/base/circular_queue_unittest.cc /Foobj/src/base/unittests.circular_queue_unittest.obj /Fd"obj/src/base/unittests_c.pdb"
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\include\algorithm(7419): error C3892: '_First': you cannot assign to a variable that is const
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\include\algorithm(7541): note: see reference to function template instantiation '_BidIt std::_Insertion_sort_unchecked<_RanIt,_Pr>(const _BidIt,const _BidIt,_Pr)' being compiled
        with
        [
            _BidIt=perfetto::base::CircularQueue<uint64_t>::Iterator,
            _RanIt=perfetto::base::CircularQueue<uint64_t>::Iterator,
            _Pr=std::less<void>
        ]
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\include\algorithm(7571): note: see reference to function template instantiation 'void std::_Sort_unchecked<_RanIt,_Fn>(_RanIt,_RanIt,__int64,_Pr)' being compiled
        with
        [
            _RanIt=perfetto::base::CircularQueue<uint64_t>::Iterator,
            _Fn=std::less<void>,
            _Pr=std::less<void>
        ]
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29333\include\algorithm(7576): note: see reference to function template instantiation 'void std::sort<_RanIt,std::less<void>>(const _RanIt,const _RanIt,_Pr)' being compiled
        with
        [
            _RanIt=perfetto::base::CircularQueue<uint64_t>::Iterator,
            _Pr=std::less<void>
        ]
D:\Progetti\perfetto\src\base\circular_queue_unittest.cc(100): note: see reference to function template instantiation 'void std::sort<perfetto::base::CircularQueue<uint64_t>::Iterator>(const _RanIt,const _RanIt)' being compiled
        with
        [
            _RanIt=perfetto::base::CircularQueue<uint64_t>::Iterator
        ]
ninja: build stopped: subcommand failed.
PS D:\Progetti\perfetto>

Bug: 174454879
Change-Id: I1cfb44dac646f455157ce08b15e14b3349e5a7de
1 file changed
tree: 71634d0163a66d512547736b45621fe92626cd64
  1. .github/
  2. bazel/
  3. build_overrides/
  4. buildtools/
  5. debian/
  6. docs/
  7. examples/
  8. gn/
  9. include/
  10. infra/
  11. protos/
  12. src/
  13. test/
  14. tools/
  15. ui/
  16. .clang-format
  17. .clang-tidy
  18. .gitignore
  19. .gn
  20. .style.yapf
  21. Android.bp
  22. Android.bp.extras
  23. BUILD
  24. BUILD.extras
  25. BUILD.gn
  26. CHANGELOG
  27. codereview.settings
  28. heapprofd.rc
  29. LICENSE
  30. METADATA
  31. MODULE_LICENSE_APACHE2
  32. OWNERS
  33. perfetto.rc
  34. PRESUBMIT.py
  35. README.chromium
  36. README.md
  37. TEST_MAPPING
  38. traced_perf.rc
  39. WORKSPACE
README.md

Perfetto - System profiling, app tracing and trace analysis

Perfetto is a production-grade open-source stack for performance instrumentation and trace analysis. It offers services and libraries and for recording system-level and app-level traces, native + java heap profiling, a library for analyzing traces using SQL and a web-based UI to visualize and explore multi-GB traces.

See https://perfetto.dev/docs or the /docs/ directory for documentation.