From aac23602db1391f06f0ac6b4eda5abbba4ee1083 Mon Sep 17 00:00:00 2001 From: "isherman@chromium.org" Date: Thu, 28 Nov 2013 02:41:47 +0000 Subject: Revert 237558 "Use MIDIMessageQueue/IsValidWebMIDIData for MIDI ..." Seems to have caused issues running perf tests. BUG=324160 > Use MIDIMessageQueue/IsValidWebMIDIData for MIDI byte stream validation > > WebMIDI spec draft: http://www.w3.org/TR/webmidi/ > > WebMIDI API guarantees that MIDIInput::onmessage is called back with a single MIDI message. To guarantee this, this CL introduces MIDIMessageQueue class, which allows you to > - maintain fragmented MIDI message. > - Skip any invalid data sequence. > - Reorder MIDI messages so that "System Real Time Message", which can be inserted at any point of the byte stream, can be placed at the boundary of complete MIDI messages. > - (Optional) Reconstruct complete MIDI messages from data stream that is compressed with "running status". > > This CL also replaces existing System Exclusive message validation logic in MIDIHost::OnSendData with MIDIHost::IsValidWebMIDIData, which can detect SysEx message even when it is concatenated with non-SysEx messages. > > With this change, renderer/blink can be much simpler and free from this kind of data validation. > > BUG=303599, 317355 > TEST=media_unittests --gtest_filter=MIDI*, content_unittests --gtest_filter=MIDI* > > Review URL: https://codereview.chromium.org/68353002 TBR=yukawa@chromium.org Review URL: https://codereview.chromium.org/93583002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@237660 0039d316-1c4b-4281-b951-d872f2087c98 --- media/midi/midi_message_queue_unittest.cc | 173 ------------------------------ 1 file changed, 173 deletions(-) delete mode 100644 media/midi/midi_message_queue_unittest.cc (limited to 'media/midi/midi_message_queue_unittest.cc') diff --git a/media/midi/midi_message_queue_unittest.cc b/media/midi/midi_message_queue_unittest.cc deleted file mode 100644 index a00eea6..0000000 --- a/media/midi/midi_message_queue_unittest.cc +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "media/midi/midi_message_queue.h" - -#include "testing/gtest/include/gtest/gtest.h" - -namespace media { -namespace { - -const uint8 kGMOn[] = { 0xf0, 0x7e, 0x7f, 0x09, 0x01, 0xf7 }; -const uint8 kGSOn[] = { - 0xf0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7f, 0x00, 0x41, 0xf7, -}; -const uint8 kNoteOn[] = { 0x90, 0x3c, 0x7f }; -const uint8 kNoteOnWithRunningStatus[] = { - 0x90, 0x3c, 0x7f, 0x3c, 0x7f, 0x3c, 0x7f, -}; -const uint8 kChannelPressure[] = { 0xd0, 0x01 }; -const uint8 kChannelPressureWithRunningStatus[] = { - 0xd0, 0x01, 0x01, 0x01, -}; -const uint8 kTimingClock[] = { 0xf8 }; -const uint8 kBrokenData1[] = { 0x90 }; -const uint8 kBrokenData2[] = { 0xf7 }; -const uint8 kBrokenData3[] = { 0xf2, 0x00 }; -const uint8 kDataByte0[] = { 0x00 }; - -template -void Add(MIDIMessageQueue* queue, const T(&array)[N]) { - queue->Add(array, N); -} - -template -::testing::AssertionResult ExpectEqualSequence( - const char* expr1, const char* expr2, - const T(&expected)[N], const std::vector& actual) { - if (actual.size() != N) { - return ::testing::AssertionFailure() - << "expected: " << ::testing::PrintToString(expected) - << ", actual: " << ::testing::PrintToString(actual); - } - for (size_t i = 0; i < N; ++i) { - if (expected[i] != actual[i]) { - return ::testing::AssertionFailure() - << "expected: " << ::testing::PrintToString(expected) - << ", actual: " << ::testing::PrintToString(actual); - } - } - return ::testing::AssertionSuccess(); -} - -#define EXPECT_MESSAGE(expected, actual) \ - EXPECT_PRED_FORMAT2(ExpectEqualSequence, expected, actual) - -TEST(MIDIMessageQueueTest, EmptyData) { - MIDIMessageQueue queue(false); - std::vector message; - queue.Get(&message); - EXPECT_TRUE(message.empty()); -} - -TEST(MIDIMessageQueueTest, RunningStatusDisabled) { - MIDIMessageQueue queue(false); - Add(&queue, kGMOn); - Add(&queue, kBrokenData1); - Add(&queue, kNoteOnWithRunningStatus); - Add(&queue, kBrokenData2); - Add(&queue, kChannelPressureWithRunningStatus); - Add(&queue, kBrokenData3); - Add(&queue, kNoteOn); - Add(&queue, kBrokenData1); - Add(&queue, kGSOn); - Add(&queue, kBrokenData2); - Add(&queue, kTimingClock); - Add(&queue, kBrokenData3); - - std::vector message; - queue.Get(&message); - EXPECT_MESSAGE(kGMOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message) << "Running status should be ignored"; - queue.Get(&message); - EXPECT_MESSAGE(kChannelPressure, message) - << "Running status should be ignored"; - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kGSOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_TRUE(message.empty()); -} - -TEST(MIDIMessageQueueTest, RunningStatusEnabled) { - MIDIMessageQueue queue(true); - Add(&queue, kGMOn); - Add(&queue, kBrokenData1); - Add(&queue, kNoteOnWithRunningStatus); - Add(&queue, kBrokenData2); - Add(&queue, kChannelPressureWithRunningStatus); - Add(&queue, kBrokenData3); - Add(&queue, kNoteOn); - Add(&queue, kBrokenData1); - Add(&queue, kGSOn); - Add(&queue, kBrokenData2); - Add(&queue, kTimingClock); - Add(&queue, kDataByte0); - - std::vector message; - queue.Get(&message); - EXPECT_MESSAGE(kGMOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message) - << "Running status should be converted into a canonical MIDI message"; - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message) - << "Running status should be converted into a canonical MIDI message"; - queue.Get(&message); - EXPECT_MESSAGE(kChannelPressure, message); - queue.Get(&message); - EXPECT_MESSAGE(kChannelPressure, message) - << "Running status should be converted into a canonical MIDI message"; - queue.Get(&message); - EXPECT_MESSAGE(kChannelPressure, message) - << "Running status should be converted into a canonical MIDI message"; - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kGSOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_TRUE(message.empty()) - << "Running status must not be applied to real time messages"; -} - -TEST(MIDIMessageQueueTest, RunningStatusEnabledWithRealTimeEvent) { - MIDIMessageQueue queue(true); - const uint8 kNoteOnWithRunningStatusWithkTimingClock[] = { - 0x90, 0xf8, 0x3c, 0xf8, 0x7f, 0xf8, 0x3c, 0xf8, 0x7f, 0xf8, 0x3c, 0xf8, - 0x7f, - }; - Add(&queue, kNoteOnWithRunningStatusWithkTimingClock); - std::vector message; - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_MESSAGE(kTimingClock, message); - queue.Get(&message); - EXPECT_MESSAGE(kNoteOn, message); - queue.Get(&message); - EXPECT_TRUE(message.empty()); -} - -} // namespace -} // namespace media -- cgit v1.1