SearchResult searchProperty(const Property &property, const TestParams ¶ms, TestListener &listener) { SearchResult searchResult; searchResult.type = SearchResult::Type::Success; searchResult.numSuccess = 0; searchResult.numDiscarded = 0; searchResult.tags.reserve(params.maxSuccess); const auto maxDiscard = params.maxDiscardRatio * params.maxSuccess; auto recentDiscards = 0; auto r = Random(params.seed); while (searchResult.numSuccess < params.maxSuccess) { const auto size = sizeFor(params, searchResult.numSuccess) + (recentDiscards / 10); const auto random = r.split(); auto shrinkable = property(random, size); auto caseDescription = shrinkable.value(); listener.onTestCaseFinished(caseDescription); const auto &result = caseDescription.result; switch (result.type) { case CaseResult::Type::Failure: searchResult.type = SearchResult::Type::Failure; searchResult.failure = SearchResult::Failure(std::move(shrinkable), size, random); return searchResult; case CaseResult::Type::Discard: searchResult.numDiscarded++; recentDiscards++; if (searchResult.numDiscarded > maxDiscard) { searchResult.type = SearchResult::Type::GaveUp; searchResult.failure = SearchResult::Failure(std::move(shrinkable), size, random); return searchResult; } break; case CaseResult::Type::Success: searchResult.numSuccess++; recentDiscards = 0; if (!caseDescription.tags.empty()) { searchResult.tags.push_back(std::move(caseDescription.tags)); } break; } } return searchResult; }
ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState, EventTarget& eventTarget, HTMLImageElement* image, ExceptionState& exceptionState) { LayoutSize s = sizeFor(image); return createImageBitmap(scriptState, eventTarget, image, 0, 0, s.width(), s.height(), exceptionState); }
ScriptPromise ImageBitmapFactories::createImageBitmap(ScriptState* scriptState, EventTarget& eventTarget, HTMLVideoElement* video, ExceptionState& exceptionState) { IntSize s = sizeFor(video); return createImageBitmap(scriptState, eventTarget, video, 0, 0, s.width(), s.height(), exceptionState); }